diff --git a/.c8rc.json b/.c8rc.json index fde64f42b6..285cab8305 100644 --- a/.c8rc.json +++ b/.c8rc.json @@ -6,7 +6,7 @@ "std/**/*", "tests/**/*", "dist/**/*", - "bin/asinit.js", + "bin/toilinit.js", "lib/**/*", "scripts/**/*", "src/glue/wasm/**/*", diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 9919f1b62f..7d213c9fad 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -26,8 +26,8 @@ body: - type: input id: version attributes: - label: AssemblyScript version - description: "What's the AssemblyScript version used?" + label: ToilScript version + description: "What's the ToilScript version used?" placeholder: "vX.Y.Z" validations: required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5abd484e8b..08eb516896 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,5 @@ Fixes # . diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..cc0180b1d7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,240 @@ +name: CI for toilscript + +on: + push: + branches: + - main + tags: + - 'v*' + pull_request: + branches: + - main + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + + - name: Update npm + run: npm install -g npm@latest + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Run tests + run: npm test + + publish: + runs-on: ubuntu-latest + needs: test + if: startsWith(github.ref, 'refs/tags/v') + + permissions: + contents: write + id-token: write + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24.x' + registry-url: 'https://registry.npmjs.org' + + - name: Update npm + run: npm install -g npm@latest + + - name: Patch package.json for toilscript + run: | + # Extract version from tag + VERSION="${{ github.ref_name }}" + VERSION="${VERSION#v}" # Remove 'v' prefix if present + + # Update package.json: change name and version + jq --arg name "toilscript" \ + --arg version "$VERSION" \ + '.name = $name | .version = $version' \ + package.json > package.json.tmp + mv package.json.tmp package.json + + echo "Updated package.json:" + cat package.json | head -20 + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Determine npm tag + id: npm_tag + run: | + VERSION="${{ github.ref_name }}" + if [[ "$VERSION" == *"-alpha"* ]]; then + echo "tag=alpha" >> $GITHUB_OUTPUT + elif [[ "$VERSION" == *"-beta"* ]]; then + echo "tag=beta" >> $GITHUB_OUTPUT + elif [[ "$VERSION" == *"-rc"* ]]; then + echo "tag=rc" >> $GITHUB_OUTPUT + else + echo "tag=latest" >> $GITHUB_OUTPUT + fi + echo "Determined npm tag: $(cat $GITHUB_OUTPUT | grep tag | cut -d= -f2)" + + - name: Publish to npm + run: npm publish --access public --provenance --tag ${{ steps.npm_tag.outputs.tag }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + release: + runs-on: ubuntu-latest + needs: publish + if: startsWith(github.ref, 'refs/tags/v') + + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Generate changelog + id: changelog + uses: mikepenz/release-changelog-builder-action@v6 + with: + configurationJson: | + { + "categories": [ + { + "title": "### Breaking Changes", + "labels": ["breaking", "breaking-change", "BREAKING-CHANGE"] + }, + { + "title": "### Features", + "labels": ["feature", "feat", "enhancement"] + }, + { + "title": "### Bug Fixes", + "labels": ["bug", "fix", "bugfix"] + }, + { + "title": "### Performance", + "labels": ["performance", "perf"] + }, + { + "title": "### Documentation", + "labels": ["documentation", "docs"] + }, + { + "title": "### Dependencies", + "labels": ["dependencies", "deps"] + }, + { + "title": "### Other Changes", + "labels": [] + } + ], + "sort": { + "order": "ASC", + "on_property": "mergedAt" + }, + "template": "#{{CHANGELOG}}", + "pr_template": "- #{{TITLE}} ([##{{NUMBER}}](#{{URL}})) by @#{{AUTHOR}}", + "empty_template": "- No changes", + "max_tags_to_fetch": 200, + "max_pull_requests": 200, + "max_back_track_time_days": 365, + "tag_resolver": { + "method": "semver" + } + } + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Update CHANGELOG.md + env: + CHANGELOG_CONTENT: ${{ steps.changelog.outputs.changelog }} + run: | + TAG="${{ github.ref_name }}" + DATE=$(date +%Y-%m-%d) + NEW_HEADER="## [$TAG] - $DATE" + + # Write changelog content to temp file using env var (avoids shell escaping) + printf '%s\n' "$CHANGELOG_CONTENT" > /tmp/new_entry.md + + if [ -f CHANGELOG.md ]; then + # Create new file with entry inserted after header line + { + head -n 1 CHANGELOG.md + echo "" + echo "$NEW_HEADER" + echo "" + cat /tmp/new_entry.md + echo "" + tail -n +2 CHANGELOG.md + } > /tmp/CHANGELOG_NEW.md + mv /tmp/CHANGELOG_NEW.md CHANGELOG.md + else + # Create new CHANGELOG.md + { + echo "# Changelog" + echo "" + echo "All notable changes to this project will be documented in this file." + echo "" + echo "This changelog is automatically generated from merged pull requests." + echo "" + echo "$NEW_HEADER" + echo "" + cat /tmp/new_entry.md + } > CHANGELOG.md + fi + + rm -f /tmp/new_entry.md + + - name: Commit changelog + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add CHANGELOG.md + git diff --staged --quiet || git commit -m "docs: update CHANGELOG.md for ${{ github.ref_name }}" + git push origin HEAD:main || echo "No changes to push or push failed" + + - name: Determine if prerelease + id: prerelease + run: | + VERSION="${{ github.ref_name }}" + if [[ "$VERSION" == *"-alpha"* ]] || [[ "$VERSION" == *"-beta"* ]] || [[ "$VERSION" == *"-rc"* ]]; then + echo "is_prerelease=true" >> $GITHUB_OUTPUT + else + echo "is_prerelease=false" >> $GITHUB_OUTPUT + fi + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.ref_name }} + name: Release ${{ github.ref_name }} + body: ${{ steps.changelog.outputs.changelog }} + prerelease: ${{ steps.prerelease.outputs.is_prerelease == 'true' }} + generate_release_notes: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9002e311df..91373f9ea7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -10,11 +10,10 @@ jobs: steps: - name: Check PR Title Prefix id: title-check - uses: actions/github-script@v9 + uses: actions/github-script@v8 with: script: | - const prefs = ["feat", "fix", "breaking", "chore"]; + const titlePrefixes = ["feat", "fix", "breaking", "chore"]; const title = context.payload.pull_request.title.toLowerCase(); - const hasValidPrefix = prefs.some(prefix => title.startsWith(`${prefix}:`)); - if (!hasValidPrefix) - core.setFailed("PR title must start with 'feat:', 'fix:', 'breaking:' or 'chore:'"); + const titleHasValidPrefix = titlePrefixes.some((prefix) => title.startsWith(`${prefix}:`)); + if (!titleHasValidPrefix) { process.exit(-1); } diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 269112457d..0000000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Publish -on: - # Note that the main branch will be used regardless of the branch chosen - # in the web interface. - workflow_dispatch: - schedule: - - cron: '0 0 * * *' -jobs: - release: - name: Packages - if: github.repository == 'AssemblyScript/assemblyscript' - runs-on: ubuntu-latest - permissions: - id-token: write - contents: write - steps: - - uses: actions/checkout@v6 - with: - ref: main - fetch-depth: 0 - - uses: actions/setup-node@v6 - with: - node-version: current - - name: Install dependencies - run: npm ci - - name: Build packages - run: | - VERSION=$(npx aspublish --version) - if [[ "$VERSION" == "" ]]; then - echo "Changes do not trigger a release" - elif [[ "$VERSION" != "0."* ]]; then - echo "Unexpected version: $VERSION" - exit 1 - else - echo "Building version: $VERSION" - npm version "$VERSION" --no-git-tag-version - npm run build - npm test - cd lib/loader - npm version "$VERSION" --no-git-tag-version - npm run build - npm test - cd ../rtrace - npm version "$VERSION" --no-git-tag-version - npm run build - npm test - cd ../.. - fi - - name: Publish packages - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - node ./scripts/prepublish - if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then - npx aspublish - fi - cd lib/loader - if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then - npm publish --access public - fi - cd ../rtrace - if [ $(node -pe "require('./package.json').version") != "0.0.0" ]; then - npm publish --access public - fi - cd ../.. - node ./scripts/prepublish --reset diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index f9d2f7db0a..0000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,146 +0,0 @@ -name: Test -on: - push: - branches: - - main - pull_request: -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true -jobs: - check: - name: "Check" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - name: "Check that distribution files are unmodified" - if: github.event_name == 'pull_request' - run: | - if git --no-pager diff --name-only $(git rev-parse origin/${{ github.base_ref }})...${{ github.sha }} | grep -q "^dist/"; then - printf "\nThe pull request modifies distribution files, but it shouldn't.\n" && - printf "Please see https://github.com/AssemblyScript/assemblyscript/blob/main/CONTRIBUTING.md\n" && - exit 1; - else - printf "\nOK: Distributions files have not been modified.\n"; - fi - compiler: - name: "Compiler (${{ matrix.os }}, node ${{ matrix.node_version }})" - runs-on: ${{ matrix.os }}-latest - needs: check - strategy: - matrix: - os: ["ubuntu", "macos", "windows"] - node_version: ["current", "lts/*"] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: ${{ matrix.node_version }} - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: Check - run: npm run check - - name: Test - run: npm test - bootstrap: - name: "Bootstrap (${{ matrix.target }})" - runs-on: ubuntu-latest - needs: check - strategy: - matrix: - target: ["debug", "release"] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: current - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: "Bootstrap ${{ matrix.target }}" - run: npm run bootstrap:${{ matrix.target }} - - name: "Test ${{ matrix.target }}" - run: npm run test:compiler -- --wasm build/assemblyscript.${{ matrix.target }}-bootstrap.js - - name: "Compile ${{ matrix.target }} -> ${{ matrix.target == 'debug' && 'release' || 'debug' }}" - run: node bin/asc --config src/asconfig.json --target ${{ matrix.target == 'debug' && 'release' || 'debug' }}-bootstrap --wasm ./build/assemblyscript.${{ matrix.target }}-bootstrap.js - - name: "Test ${{ matrix.target == 'debug' && 'release' || 'debug' }}" - run: npm run test:compiler -- --wasm build/assemblyscript.${{ matrix.target == 'debug' && 'release' || 'debug' }}-bootstrap.js - features: - name: "Features" - runs-on: ubuntu-latest - needs: check - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: Test experimental features - env: - ASC_FEATURES: threads,reference-types,gc,exception-handling - run: | - npm run test:compiler features/threads features/reference-types features/gc features/exception-handling bindings/esm bindings/raw - runtimes: - name: "Runtimes" - runs-on: ubuntu-latest - needs: check - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: current - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: Test default allocator - run: | - cd tests/allocators/default - npm run build - cd .. - npm test default - - name: Test stub allocator - run: | - cd tests/allocators/stub - npm run build - cd .. - npm test stub - loader: - name: "Loader" - runs-on: ubuntu-latest - needs: check - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: current - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: Test the loader - run: | - cd lib/loader - npm run asbuild - npm run test - coverage: - name: "Coverage" - runs-on: ubuntu-latest - needs: check - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 - with: - node-version: 24 - - name: Install dependencies - run: npm ci --no-audit - - name: Build - run: npm run build - - name: Collect coverage - run: npx c8 -r none -- npm test - - name: Output coverage summary - run: npx c8 report -r text-summary diff --git a/.gitignore b/.gitignore index 79bb9e71d8..41e082a449 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,7 @@ coverage/ dist/*.generated.d.ts dist/*.map -dist/asc.js -dist/assemblyscript.js +dist/cli.js +dist/toilscript.js dist/importmap.json dist/web.js diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000000..6652c48e71 --- /dev/null +++ b/.npmignore @@ -0,0 +1,10 @@ +# Presence of this file stops npm from falling back to .gitignore when packing. +# Without it, .gitignore (which ignores the built dist/*.js) strips the compiler +# bundle from the published tarball. What ships is controlled by the "files" +# allowlist in package.json; this list only trims dev-only content from it. +src/ +tests/ +scripts/ +.github/ +*.map +*.tsbuildinfo diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..6f809a9205 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,303 @@ +# Changelog + +## [v0.1.38] - 2026-06-21 + +- No changes + + +## [v0.1.37] - 2026-06-21 + +- No changes + + +## [v0.1.36] - 2026-06-20 + +### Other Changes + +- fix(ts-plugin): skip static @collection fields (TS2300) ([#19](https://github.com/dacely-cloud/toilscript/pull/19)) by @BlobMaster41 + + + + +## [v0.1.35] - 2026-06-20 + +- No changes + + +## [v0.1.33] - 2026-06-19 + +### Other Changes + +- feat(database): support @collection static (plugin-free Db.coll typing) ([#17](https://github.com/dacely-cloud/toilscript/pull/17)) by @BlobMaster41 + + + + +## [v0.1.32] - 2026-06-19 + +- No changes + + +## [v0.1.31] - 2026-06-18 + +### Dependencies + +- chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 ([#7](https://github.com/dacely-cloud/toilscript/pull/7)) by @dependabot[bot] + +### Other Changes + +- breaking: rename Record handle to Documents, key-first generics, no import ([#16](https://github.com/dacely-cloud/toilscript/pull/16)) by @BlobMaster41 + + + + +## [v0.1.30] - 2026-06-18 + +### Other Changes + +- fix: type @database static collection handles in the editor ([#15](https://github.com/dacely-cloud/toilscript/pull/15)) by @BlobMaster41 + + + + +## [v0.1.29] - 2026-06-18 + +### Other Changes + +- feat: ToilDB membership family (Membership handle + dbKindCheck) ([#13](https://github.com/dacely-cloud/toilscript/pull/13)) by @BlobMaster41 +- feat: ToilDB capacity family + ambient handles/decorators (no import) ([#14](https://github.com/dacely-cloud/toilscript/pull/14)) by @BlobMaster41 + + + + +## [v0.1.28] - 2026-06-17 + +### Other Changes + +- feat(toildb): @database codegen + @data Uint8Array; type SubtleCrypto ABI ids ([#11](https://github.com/dacely-cloud/toilscript/pull/11)) by @BlobMaster41 +- feat: ToilDB view + getMany handles + @query/@action permission check ([#12](https://github.com/dacely-cloud/toilscript/pull/12)) by @BlobMaster41 + + + + +## [v0.1.27] - 2026-06-16 + +### Other Changes + +- feat(types): type @ratelimit strategy as the RateLimit enum ([#10](https://github.com/dacely-cloud/toilscript/pull/10)) by @BlobMaster41 + + + + +## [v0.1.26] - 2026-06-16 + +### Other Changes + +- fix(ts-plugin): export-match @data/@user codec augmentation (TS2395) ([#9](https://github.com/dacely-cloud/toilscript/pull/9)) by @BlobMaster41 + + + + +## [v0.1.25] - 2026-06-15 + +- No changes + + +## [v0.1.24] - 2026-06-15 + +- fix(types): declare the @cache / @auth / @user / @ratelimit decorators in toilscript.d.ts so editors stop reporting "Cannot find name" on them + + +## [v0.1.23] - 2026-06-15 + +### Other Changes + +- feat: @ratelimit(strategy, limit, window) route decorator ([#8](https://github.com/dacely-cloud/toilscript/pull/8)) by @BlobMaster41 + + + + +## [v0.1.23] - 2026-06-15 + +- feat(parser): @ratelimit(strategy, limit, window) route decorator ([#8](https://github.com/dacely-cloud/toilscript/pull/8)) + + +## [v0.1.22] - 2026-06-13 + +- No changes + + +## [v0.1.22] - 2026-06-13 + +- feat(parser): @auth / @user decorators + typed AuthService.getUser() +- feat(parser): @cache(ttl) decorator for route responses + + +## [v0.1.21] - 2026-06-13 + +- No changes + + +## [v0.1.20] - 2026-06-13 + +- No changes + + +## [v0.1.19] - 2026-06-12 + +- No changes + + +## [v0.1.18] - 2026-06-08 + +### Other Changes + +- fix(crypto): global crypto usable from global scope + typed in the editor ([#6](https://github.com/dacely-cloud/toilscript/pull/6)) by @BlobMaster41 + + + + +## [v0.1.17] - 2026-06-08 + +### Other Changes + +- fix: serialize bigint REST bodies and type generated encode() as ArrayBuffer-backed ([#2](https://github.com/dacely-cloud/toilscript/pull/2)) by @BlobMaster41 +- feat(crypto): synchronous Web Crypto / SubtleCrypto std module ([#3](https://github.com/dacely-cloud/toilscript/pull/3)) by @BlobMaster41 + + + + +## [v0.1.16] - 2026-06-08 + +- Add a synchronous Web Crypto / SubtleCrypto standard-library module + (`std/assembly/crypto.ts` + `crypto/{algorithms,key,subtle}.ts` + + `bindings/webcrypto.ts`), backed by metered `env.crypto.*` host functions. The + surface: `crypto.subtle.digest/encrypt/decrypt/sign/verify/importKey/exportKey/ + deriveBits/deriveKey`, `crypto.getRandomValues`, `crypto.randomUUID`, plus + ergonomic helpers (`crypto.sha256`/`sha512`/`hmacSha256`, `*Text` string + variants, `crypto.toHex`). Algorithms: SHA-1/256/384/512 (+SHA-3), HMAC, + PBKDF2, HKDF, AES-GCM/CBC/CTR, ECDSA (P-256/P-384), Ed25519, ECDH, X25519. +- Deliberate deviations from the web spec: the API is synchronous (no Promises); + algorithm parameters are small classes (`AesGcmParams`, ...) not object + literals; key usages are an `i32` bitmask; `deriveKey` takes an explicit bit + length. RSA, on-host key generation, and the `jwk` format are not provided — + RSA was dropped because the only pure-Rust implementation has an unfixable + timing side-channel (RUSTSEC-2023-0071); keys are imported, never generated. +- `crypto.getRandomValues` moved out of `bindings/dom.ts` (the old + `getRandomValuesN` import) into the new module, backed by `crypto.fill_random`. + + +## [v0.1.15] - 2026-06-06 + +- The generated client module (`--rpcModule`) is now lint-clean. It leads with `/* eslint-disable */` (it is auto-generated, not meant to be edited or linted), and the generated REST client builds its error messages with a template literal instead of `string + number` concatenation, which `@typescript-eslint/restrict-plus-operands` flags. No behavior or type change; regenerate with a server build to pick it up. + + +## [v0.1.14] - 2026-06-06 + +- Editor: the codec members the compiler injects into a `@data` class are now TYPED in the editor, not merely error-free. The language-service plugin declaration-merges typed signatures onto each `@data` class (appending ambient decls to the file the editor sees), so `value.toJSON()` is `JSON`, `value.encode()` is `Uint8Array`, and `Type.decode(bytes)` / `Type.fromJSON(j)` return the class, with autocomplete. A typo or a member on a non-`@data` type still errors. Also adds the ambient declaration for the globalized `JSON` value tree (`JSON.obj()`/`arr()`/`parse()`/`stringify()`, `.set()`/`.push()`/`.get()`/`.toString()`, the `is*`/`as*` accessors). Editor-only; compiler behavior is unchanged. + + +## [v0.1.13] - 2026-06-06 + +- No changes + + +## [v0.1.13] - 2026-06-06 + +- Editor: the language-service plugin now stops a class, method, or function that is used only via a toil-native decorator (`@data`, `@rest`, `@service`, `@remote`, `@route` and the verb shortcuts, `@main`, ...) from being reported as unused ("declared but never used", `TS6133` / `TS6196`), in both the semantic and the suggestion (greying) streams. The check is scoped to the known toil decorators, so an undecorated unused declaration is still flagged. Compiler behavior is unchanged. + + +## [v0.1.12] - 2026-06-06 + +- Editor: the language-service plugin now also hides the false `TS2339` ("Property '' does not exist on type ''") for the members the compiler injects into a `@data` class - `encode` / `encodeInto` / `decode` / `decodeFrom` / `toJSON` / `fromJSON` / `dataId`, both instance and static. The suppression is scoped by type to `@data` classes, so a typo, or the same member name on any other type, still surfaces. This lets server code build and return a `Response` carrying a serialized `@data` body (e.g. `Response.json(value.toJSON().toString()).setHeader(...)`) without spurious editor errors. Compiler behavior is unchanged. + + +## [v0.1.11] - 2026-06-06 + +- No changes + + +## [v0.1.11] - 2026-06-06 + +- Add the `@rest` / `@route` HTTP layer. Tag a class `@rest("prefix")` and its methods with `@route({ method, path, stream })` or a verb shortcut (`@get` / `@post` / `@put` / `@del` / `@patch` / `@head` / `@options`) to declare HTTP routes. Each controller self-registers, so a handler that calls `Rest.dispatch(req)` serves every route: HTTP method plus the prefix-joined path with `:param` capture, request-body decode and response encode per `DataStream.JSON` / `DataStream.Binary`. Adds globalized `Methods` and `DataStream` enums and their ambient editor declarations. +- Extend `--rpcModule` to also emit a working, typed `Server.REST..(args)` `fetch` client (URL building, path params, JSON/binary body, typed response parse) into the generated client module, alongside the existing `@data` classes and the `@remote`/`@service` surface. Route `:param` names are emitted as safe object keys (quoted unless a plain identifier), so a hostile route path cannot inject code into the generated client. +- Security: bound JSON parse nesting depth at 512. The recursive-descent parser had no depth limit, so a small hostile input (e.g. a body of `[[[[...`) could overflow the stack and trap the instance, reachable wherever untrusted JSON is parsed (now including `@rest` JSON-stream request bodies). Over-nested input now fails as an ordinary parse error; valid JSON is unaffected. +- Merge the upstream fix to evaluate a `call_indirect` callee before its arguments (#2994), adapted for the fork's closures code path. + + +## [v0.1.10] - 2026-06-05 + +- No changes + + +## [v0.1.10] - 2026-06-05 + +- Add ambient editor declarations for the `@data`/`@remote`/`@service` decorators (typed as their decorator targets: class decorators take the constructor, the method decorator takes target/key/descriptor) so IDEs resolve them instead of reporting `TS2304: Cannot find name 'data'`. The bundled TS language-service plugin already suppresses the remaining decorator-grammar notices. Compiler behavior unchanged. + + +## [v0.1.9] - 2026-06-05 + +### Other Changes + +- fix(rpc): bound @data array decode (CWE-770) + hard-error on unsupported types ([#1](https://github.com/dacely-cloud/toilscript/pull/1)) by @BlobMaster41 + + + + +## [v0.1.9] - 2026-06-05 + +- Harden the `@data` codegen against hostile input: the generated array decoders now stop at the bytes actually present (`&& r.ok` / `&&__r.ok`) instead of looping on the wire-supplied element count, so a tiny payload claiming billions of elements can no longer exhaust memory (CWE-770). No change to the wire format or to well-formed decoding. +- Emit a hard compile error for an unsupported `@data` field or `@remote` parameter/return type (a `Map`, a nested array, a non-`@data` class, ...) instead of silently generating an uncompilable client module. + + +## [v0.1.8] - 2026-06-05 + +- Add the `@data` binary codec: tag a class `@data` and the compiler generates `encode`/`decode` (compact, self-identifying, little-endian, with a stable FNV-1a typeId at the message boundary) plus a `toJSON`/`fromJSON` view, over scalars, `bool`, `string`, native `u128`/`i128`/`u256`/`i256`, nested `@data`, and `Array`. Round-trip covered by `npm run test:data`. +- Add `@remote` and `@service` decorators plus `--rpcModule ` (and `--rpcRuntime`, default `toiljs/io`): the server build emits one TypeScript module describing the client-callable surface, an `export class` per `@data` type (positional constructor, `encodeInto`/`encode`/`decodeFrom`/`decode`/`dataId`, declared field modifiers preserved), plus `declare global { const Server }`, so a client gets a typed `Server.fn()` / `Server.service.method()` API (all async) with no imports. + + +## [v0.1.7] - 2026-06-05 + +- Add a native `JSON` standard-library global (no import): a dynamic value tree (`JSON.obj()/arr()/of()/nul()` with chainable `.set()/.push()`, serialized via `toString()`, so a type can implement `toJSON(): JSON`), the typed serializer `JSON.stringify` (booleans, signed and unsigned integers, floats with NaN and Infinity mapping to null, escaped strings, null, and arrays), and `JSON.parse` (recursive descent yielding the value tree, returning an error value on malformed input rather than trapping). Value accessors include `isNull` through `isError`, `asBool`/`asF64`/`asI64`/`asU64`/`asString`, and `length`/`at`/`has`/`get`/`objectKeys`. Covered by an exhaustive `npm run test:json` suite. + + +## [v0.1.6] - 2026-06-05 + +- Relocate the big-integer ambient declarations (`u128`/`i128`/`u256`/`i256`) into `std/assembly/toilscript.d.ts` alongside `@main`, and drop the now-unused compiled `std/assembly/toilscript.ts`. No API change, the types resolve exactly as before. + + +## [v0.1.5] - 2026-06-05 + +- Add native `u128`, `i128` and `u256` (plus `i256`) integer types: an audited 128/256-bit integer implementation lives in `std/assembly/bignum` (Apache-2.0), promoted to global types via a top-level library entry, with ambient declarations for editors. Usable with no import, like the built-in integer types. +- Add `std/ts-plugin.cjs`, a TypeScript Language Service plugin that suppresses the decorator-grammar false positives (TS1206, TS1249) stock TypeScript emits for toil-native decorators (`@main`, `@inline`, `@unmanaged`, ...) in editors. Wired into `std/assembly.json` so every project extending it gets a clean editor (VS Code, WebStorm) with no source-level `@ts-ignore`. Editor-only, does not affect `toilscript`/asc builds, and real type errors are still reported. +- Tighten the `@main` declaration from `(...args: any[]): any` to a strict generic decorator signature (no `any`). + + +## [v0.1.4] - 2026-05-31 + +- No changes + +## [v0.1.2] - 2026-05-30 + +- No changes + + +## [v0.1.2] - 2026-05-30 + +- Rename the CLI from `asc` to `toilscript` (bin `bin/toilscript.js`, bundle `dist/cli.js`, `./cli` export, help text) +- Rename `asinit` -> `toilinit` and `asconfig` -> `toilconfig` (scaffolder bin + config test fixtures) +- README logo now uses `media/icon.png` + +## [v0.1.1] - 2026-05-30 + +- No changes + + +## [v0.1.0] - 2026-05-30 + +- No changes + + +All notable changes to this project will be documented in this file. + +This changelog is automatically generated from merged pull requests. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 57b2125939..77c6ac2847 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,12 @@ Contributing ============ -The following is a set of guidelines for contributing to AssemblyScript and its packages, which are hosted in the [AsssemblyScript Organization](https://github.com/AssemblyScript) on GitHub. These are mostly guidelines, not rules. Use your best judgement, and feel free to propose changes to this document in a pull request. +The following is a set of guidelines for contributing to ToilScript and its packages, which are hosted in the [ToilScript Organization](https://github.com/dacely-cloud) on GitHub. These are mostly guidelines, not rules. Use your best judgement, and feel free to propose changes to this document in a pull request. Code of Conduct --------------- -This project and everyone participating in it is governed by the [AssemblyScript Code of Conduct](https://github.com/AssemblyScript/.github/blob/main/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. +This project and everyone participating in it is governed by the [ToilScript Code of Conduct](https://github.com/dacely-cloud/.github/blob/main/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Filing Issues ------------- @@ -57,7 +57,7 @@ Guidelines for **AI**-assisted Contributions **AI** tools are welcome as helpers, not authors. Keep these practices in mind: * Stay accountable: only submit changes you understand and can justify; be ready to explain behavior, edge cases. If an **AI** suggestion feels unclear, rewrite or drop it. -* Keep humans in the loop: discuss non-trivial ideas early via [Issues](https://github.com/AssemblyScript/assemblyscript/issues) or [Discord](https://discord.gg/assemblyscript), especially when you are unsure about design or impact. +* Keep humans in the loop: discuss non-trivial ideas early via [Issues](https://github.com/dacely-cloud/toilscript/issues) or [Discord](https://discord.gg/toilscript), especially when you are unsure about design or impact. * Use **AI** for acceleration, optimization and verification: treat **AI** output as a draft for code, tests, or docs; run linters/tests and review the logic **yourself**. * Be transparent in PRs: note briefly if **AI** was used and for what (e.g., initial draft, test scaffolding), and call out any parts where you want extra review. * Prefer small patches over large dumps; if you cannot confidently explain an **AI**-produced change, open a well-described issue instead. diff --git a/NOTICE b/NOTICE index da2cb563d4..04fd46e48b 100644 --- a/NOTICE +++ b/NOTICE @@ -1,4 +1,4 @@ -The following authors have all licensed their contributions to AssemblyScript +The following authors have all licensed their contributions to ToilScript under the licensing terms detailed in LICENSE: * Daniel Wirtz @@ -63,6 +63,7 @@ under the licensing terms detailed in LICENSE: * Mopsgamer <79159094+Mopsgamer@users.noreply.github.com> * EDM115 * Weixie Cui +* Anakun Portions of this software are derived from third-party works licensed under the following terms: diff --git a/README.md b/README.md index 5df1fa3c5b..4bc6c597ce 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,60 @@

- AssemblyScript logo + ToilScript logo

- Test status - Publish status - npm compiler version - Discord online - #StandWithUkraine + npm version + GitHub release

-

AssemblyScript compiles a variant of TypeScript (basically JavaScript with types) to WebAssembly using Binaryen. It generates lean and mean WebAssembly modules while being just an npm install away.

+--- -

- About  Â·  - Getting started  Â·  - Examples  Â·  - Built with AssemblyScript -

-
+## ToilScript -

Contributors

+**ToilScript is a fork of [AssemblyScript](https://github.com/AssemblyScript/assemblyscript)** that tracks the latest upstream and adds language features not yet available in the official release. -

- Contributor logos -

+--- -

Thanks to our sponsors!

+## Installation -

Most of the maintainers and contributors do this open source work in their free time. If you use AssemblyScript for a serious task or plan to do so, and you'd like us to invest more time on it, please donate to our OpenCollective. By sponsoring this project, your logo will show up below. Thank you so much for your support!

+```sh +npm install toilscript +``` -

- Sponsor logos -

+### Usage + +This fork is a drop-in replacement for ToilScript. Simply replace your import: + +```json +{ + "dependencies": { + "toilscript": "^0.1.0" + } +} +``` + +Or if migrating from official ToilScript: + +```sh +npm uninstall toilscript +npm install toilscript +``` + +The CLI is `toilscript` (with `toilinit` to scaffold a project): + +```sh +npx toilscript your-file.ts --outFile output.wasm +``` + +--- ## Development instructions A development environment can be set up by cloning the repository: ```sh -git clone https://github.com/AssemblyScript/assemblyscript.git -cd assemblyscript +git clone https://github.com/dacely-cloud/toilscript.git +cd toilscript npm install npm link ``` diff --git a/bin/asinit.js b/bin/toilinit.js similarity index 89% rename from bin/asinit.js rename to bin/toilinit.js index 5e3566ddc1..35d0be9f78 100755 --- a/bin/asinit.js +++ b/bin/toilinit.js @@ -40,7 +40,7 @@ if (typeof process.env.npm_config_user_agent === "string") { } } -const asinitOptions = { +const toilinitOptions = { "help": { "category": "General", "description": "Prints this help message.", @@ -63,7 +63,7 @@ const asinitOptions = { }, }; -const cliOptions = optionsUtil.parse(process.argv.slice(2), asinitOptions); +const cliOptions = optionsUtil.parse(process.argv.slice(2), toilinitOptions); if (cliOptions.options.noColors) { stdoutColors.enabled = false; @@ -73,17 +73,17 @@ if (cliOptions.options.help || cliOptions.arguments.length === 0) printHelp(); function printHelp() { console.log([ - "Sets up a new AssemblyScript project or updates an existing one.", + "Sets up a new ToilScript project or updates an existing one.", "", stdoutColors.white("SYNTAX"), - " " + stdoutColors.cyan("asinit") + " directory [options]", + " " + stdoutColors.cyan("toilinit") + " directory [options]", "", stdoutColors.white("EXAMPLES"), - " " + stdoutColors.cyan("asinit") + " .", - " " + stdoutColors.cyan("asinit") + " ./newProject -y", + " " + stdoutColors.cyan("toilinit") + " .", + " " + stdoutColors.cyan("toilinit") + " ./newProject -y", "", stdoutColors.white("OPTIONS"), - optionsUtil.help(asinitOptions, { noCategories: true }) + optionsUtil.help(toilinitOptions, { noCategories: true }) ].join("\n")); process.exit(0); } @@ -92,11 +92,11 @@ const compilerDir = path.join(dirname, ".."); const projectDir = path.resolve(cliOptions.arguments[0]); const assemblyDir = path.join(projectDir, "assembly"); const tsconfigFile = path.join(assemblyDir, "tsconfig.json"); -const asconfigFile = path.join(projectDir, "asconfig.json"); +const toilconfigFile = path.join(projectDir, "toilconfig.json"); let tsconfigBase = path.relative(assemblyDir, path.join(compilerDir, "std", "assembly.json")); -if (/^(\.\.[/\\])*node_modules[/\\]assemblyscript[/\\]/.test(tsconfigBase)) { +if (/^(\.\.[/\\])*node_modules[/\\]toilscript[/\\]/.test(tsconfigBase)) { // Use node resolution if the compiler is a normal dependency - tsconfigBase = "assemblyscript/std/assembly.json"; + tsconfigBase = "toilscript/std/assembly.json"; } const entryFile = path.join(assemblyDir, "index.ts"); const buildDir = path.join(projectDir, "build"); @@ -108,12 +108,12 @@ const indexHtmlFile = path.join(projectDir, "index.html"); const testsIndexFile = path.join(testsDir, "index.js"); const paths = [ - [assemblyDir, "Directory holding the AssemblyScript sources being compiled to WebAssembly."], - [tsconfigFile, "TypeScript configuration inheriting recommended AssemblyScript settings."], + [assemblyDir, "Directory holding the ToilScript sources being compiled to WebAssembly."], + [tsconfigFile, "TypeScript configuration inheriting recommended ToilScript settings."], [entryFile, "Example entry file being compiled to WebAssembly to get you started."], [buildDir, "Build artifact directory where compiled WebAssembly files are stored."], [gitignoreFile, "Git configuration that excludes compiled binaries from source control."], - [asconfigFile, "Configuration file defining both a 'debug' and a 'release' target."], + [toilconfigFile, "Configuration file defining both a 'debug' and a 'release' target."], [packageFile, "Package info containing the necessary commands to compile to WebAssembly."], [testsIndexFile, "Starter test to check that the module is functioning."], [indexHtmlFile, "Starter HTML file that loads the module in a browser."] @@ -126,7 +126,7 @@ if (fs.existsSync(packageFile)) { if ("type" in pkg && pkg["type"] !== "module") { console.error(stdoutColors.red([ `Error: The "type" field in ${formatPath(packageFile)} is set to "${pkg["type"]}".`, - ` asinit requires the "type" field to be set to "module" (ES modules).` + ` toilinit requires the "type" field to be set to "module" (ES modules).` ].join("\n"))); process.exit(1); } @@ -159,7 +159,7 @@ function createProject(answer) { ensureBuildDirectory(); ensureGitignore(); ensurePackageJson(); - ensureAsconfigJson(); + ensureToilconfigJson(); ensureTestsDirectory(); ensureTestsIndexJs(); ensureIndexHtml(); @@ -199,7 +199,7 @@ function createProject(answer) { "", stdoutColors.white(" " + commands[pm].test), "", - "The AssemblyScript documentation covers all the details:", + "The ToilScript documentation covers all the details:", "", " https://www.assemblyscript.org", "", @@ -263,10 +263,10 @@ function ensureTsconfigJson() { console.log(); } -function ensureAsconfigJson() { - console.log("- Making sure that 'asconfig.json' is set up..."); - if (!fs.existsSync(asconfigFile)) { - fs.writeFileSync(asconfigFile, JSON.stringify({ +function ensureToilconfigJson() { + console.log("- Making sure that 'toilconfig.json' is set up..."); + if (!fs.existsSync(toilconfigFile)) { + fs.writeFileSync(toilconfigFile, JSON.stringify({ targets: { debug: { // -o build/debug.wasm -t build/debug.wat --sourceMap --debug @@ -290,9 +290,9 @@ function ensureAsconfigJson() { bindings: "esm" } }, null, 2)); - console.log(stdoutColors.green(" Created: ") + asconfigFile); + console.log(stdoutColors.green(" Created: ") + toilconfigFile); } else { - console.log(stdoutColors.yellow(" Exists: ") + asconfigFile); + console.log(stdoutColors.yellow(" Exists: ") + toilconfigFile); } console.log(); } @@ -342,8 +342,8 @@ function ensureGitignore() { function ensurePackageJson() { console.log("- Making sure that 'package.json' contains the build commands..."); const entryPath = path.relative(projectDir, entryFile).replace(/\\/g, "/"); - const buildDebug = "asc " + entryPath + " --target debug"; - const buildRelease = "asc " + entryPath + " --target release"; + const buildDebug = "toilscript " + entryPath + " --target debug"; + const buildRelease = "toilscript " + entryPath + " --target release"; const buildAll = commands[pm].run + " asbuild:debug && " + commands[pm].run + " asbuild:release"; if (!fs.existsSync(packageFile)) { fs.writeFileSync(packageFile, JSON.stringify({ @@ -362,7 +362,7 @@ function ensurePackageJson() { "start": "npx serve ." }, "devDependencies": { - "assemblyscript": "^" + version + "toilscript": "^" + version } }, null, 2)); console.log(stdoutColors.green(" Created: ") + packageFile); @@ -400,8 +400,8 @@ function ensurePackageJson() { updated = true; } let devDependencies = pkg["devDependencies"] || {}; - if (!devDependencies["assemblyscript"]) { - devDependencies["assemblyscript"] = "^" + version; + if (!devDependencies["toilscript"]) { + devDependencies["toilscript"] = "^" + version; pkg["devDependencies"] = devDependencies; updated = true; } diff --git a/bin/asc.js b/bin/toilscript.js similarity index 93% rename from bin/asc.js rename to bin/toilscript.js index 8924e92340..38d6938302 100755 --- a/bin/asc.js +++ b/bin/toilscript.js @@ -26,7 +26,7 @@ if ((!hasSourceMaps || ~posCustomArgs) && !isDeno) { ); if (status || signal) process.exitCode = 1; } else { - const apiResult = (await import("../dist/asc.js")).main(process.argv.slice(2), { + const apiResult = (await import("../dist/cli.js")).main(process.argv.slice(2), { stdout: process.stdout, stderr: process.stderr }); diff --git a/cli/README.md b/cli/README.md index 9e048005e3..103ffefdce 100644 --- a/cli/README.md +++ b/cli/README.md @@ -7,7 +7,7 @@ Usage For an up to date list of available command line options, see: ``` -$> asc --help +$> toilscript --help ``` API @@ -16,9 +16,9 @@ API The API accepts the same options as the CLI but also lets you override stdout and stderr. Example: ```js -import asc from "assemblyscript/asc"; +import toilscript from "toilscript/toilscript"; -const { error, stdout } = await asc.main([ +const { error, stdout } = await toilscript.main([ "myModule.ts", "--outFile", "myModule.wasm", "--optimize", @@ -44,8 +44,8 @@ The result has the following structure: You can also compile a single source string directly (note that this API has limited functionality): ```js -import asc from "assemblyscript/asc"; -const { binary, text, stdout, stderr } = await asc.compileString(`...`, { optimize: 2 }); +import toilscript from "toilscript/toilscript"; +const { binary, text, stdout, stderr } = await toilscript.compileString(`...`, { optimize: 2 }); ... ``` @@ -53,6 +53,6 @@ const { binary, text, stdout, stderr } = await asc.compileString(`...`, { optimi Available command line options can also be obtained programmatically: ```js -import { options } from "assemblyscript/asc"; +import { options } from "toilscript/toilscript"; ... ``` diff --git a/cli/index.d.ts b/cli/index.d.ts index 58c7fb4ef6..44c7248a28 100644 --- a/cli/index.d.ts +++ b/cli/index.d.ts @@ -1,12 +1,12 @@ /** - * @fileoverview Definitions for asc. + * @fileoverview Definitions for the toilscript CLI. * @license Apache-2.0 */ import { OptionDescription } from "../util/options"; export { OptionDescription }; -/** AssemblyScript version. */ +/** ToilScript version. */ export const version: string; /** Available CLI options. */ diff --git a/cli/index.js b/cli/index.js index 7e202e4f61..ce5e1b30e8 100644 --- a/cli/index.js +++ b/cli/index.js @@ -1,6 +1,6 @@ /** * @license - * Copyright 2020 Daniel Wirtz / The AssemblyScript Authors. + * Copyright 2020 Daniel Wirtz / The ToilScript Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ * JavaScript as well as the compiler compiled to WebAssembly (eventually). * * Can also be packaged as a bundle suitable for in-browser use with the standard library injected - * in the build step. See dist/asc.js for the bundle. + * in the build step. See dist/cli.js for the bundle. */ import { fs, module, path, process, url } from "../util/node.js"; @@ -34,7 +34,7 @@ import * as optionsUtil from "../util/options.js"; import * as generated from "./index.generated.js"; import binaryen from "../lib/binaryen.js"; -import * as assemblyscriptJS from "assemblyscript"; +import * as assemblyscriptJS from "toilscript"; // Use the TS->JS variant by default let assemblyscript = assemblyscriptJS; @@ -74,7 +74,7 @@ function isNonEmptyString(value) { // return ptrOrObj; // } -/** AssemblyScript version. */ +/** ToilScript version. */ export const version = generated.version; /** Available CLI options. */ @@ -205,7 +205,7 @@ export async function main(argv, options) { const baseDir = path.normalize(opts.baseDir || "."); // Check if a config file is present - let configPath = optionsUtil.resolvePath(opts.config || "asconfig.json", baseDir); + let configPath = optionsUtil.resolvePath(opts.config || "toilconfig.json", baseDir); let configFile = path.basename(configPath); let configDir = path.dirname(configPath); let config = await getConfig(configFile, configDir, readFile); @@ -217,13 +217,13 @@ export async function main(argv, options) { let colors = opts.help ? stdoutColors : stderrColors; out.write([ colors.white("SYNTAX"), - " " + colors.cyan("asc") + " [entryFile ...] [options]", + " " + colors.cyan("toilscript") + " [entryFile ...] [options]", "", colors.white("EXAMPLES"), - " " + colors.cyan("asc") + " hello" + extension, - " " + colors.cyan("asc") + " hello" + extension + " -o hello.wasm -t hello.wat", - " " + colors.cyan("asc") + " hello1" + extension + " hello2" + extension + " -o -O > hello.wasm", - " " + colors.cyan("asc") + " --config asconfig.json --target release", + " " + colors.cyan("toilscript") + " hello" + extension, + " " + colors.cyan("toilscript") + " hello" + extension + " -o hello.wasm -t hello.wat", + " " + colors.cyan("toilscript") + " hello1" + extension + " hello2" + extension + " -o -O > hello.wasm", + " " + colors.cyan("toilscript") + " --config toilconfig.json --target release", "", colors.white("OPTIONS"), ].concat( @@ -239,9 +239,9 @@ export async function main(argv, options) { if (listFiles === listFilesNode) throw Error("'options.listFiles' must be specified"); } - // Load additional options from asconfig.json - const seenAsconfig = new Set(); - seenAsconfig.add(configPath); + // Load additional options from toilconfig.json + const seenToilconfig = new Set(); + seenToilconfig.add(configPath); const target = opts.target || "release"; while (config) { // Merge target first @@ -264,13 +264,13 @@ export async function main(argv, options) { } } - // Look up extended asconfig and repeat + // Look up extended toilconfig and repeat if (config.extends) { configPath = optionsUtil.resolvePath(config.extends, configDir, true); configFile = path.basename(configPath); configDir = path.dirname(configPath); - if (seenAsconfig.has(configPath)) break; - seenAsconfig.add(configPath); + if (seenToilconfig.has(configPath)) break; + seenToilconfig.add(configPath); config = await getConfig(configFile, configDir, readFile); } else { break; @@ -300,6 +300,7 @@ export async function main(argv, options) { switch (opts.runtime) { case "stub": runtime = 0; break; case "minimal": runtime = 1; break; + case "memory": runtime = 3; break; /* incremental */ default: runtime = 2; break; } @@ -309,6 +310,16 @@ export async function main(argv, options) { case "never": uncheckedBehavior = 1; break; case "always": uncheckedBehavior = 2; break; } + // Resolve the Toil compile surface mode. Absent => null (legacy single artifact); + // an explicit value must be "hot" or "cold", else this is a CLI-level error before compile. + let targetMode = null; + if (opts.targetMode != null && String(opts.targetMode).length > 0) { + targetMode = String(opts.targetMode); + if (targetMode !== "hot" && targetMode !== "cold") { + return prepareResult(Error(`Target mode '${targetMode}' is invalid; expected 'hot' or 'cold'.`)); + } + } + assemblyscript.setTargetMode(compilerOptions, targetMode); assemblyscript.setTarget(compilerOptions, 0); assemblyscript.setDebugInfo(compilerOptions, !!opts.debug); assemblyscript.setRuntime(compilerOptions, runtime); @@ -688,6 +699,37 @@ export async function main(argv, options) { stats.parseTime += stats.end(begin); } + // Auto-discover ToilDB migration files (the `migrations/.migration.ts` + // convention): parse every `*.migration.ts` under baseDir so its `@migrate` + // transforms + kept old `@data` shapes are in the program even though nothing + // imports them. The value type's woven decoder gets the cross-file import + // injected (see weaveDecodeInto); a project with no migrations scans to nothing. + if (fs.promises && fs.promises.readdir) { + const migrationFiles = []; + const scanMigrations = async (absDir, relDir) => { + let entries; + try { entries = await fs.promises.readdir(absDir, { withFileTypes: true }); } + catch { return; } + for (const ent of entries) { + const name = ent.name; + if (ent.isDirectory()) { + if (name === "node_modules" || name === "build" || name === "dist" || name.charAt(0) === ".") continue; + await scanMigrations(path.join(absDir, name), relDir ? relDir + "/" + name : name); + } else if (name.endsWith(".migration" + extension)) { + migrationFiles.push(relDir ? relDir + "/" + name : name); + } + } + }; + await scanMigrations(path.resolve(baseDir), ""); + for (const relPath of migrationFiles) { + const sourcePath = relPath.replace(/\\/g, "/"); + const sourceText = await readFile(sourcePath, baseDir); + if (sourceText == null) continue; + stats.parseCount++; + assemblyscript.parse(program, sourceText, sourcePath, false); // non-entry: not a wasm export + } + } + // Parse entry files { let code = await parseBacklog(); @@ -731,6 +773,12 @@ export async function main(argv, options) { try { module = assemblyscript.compile(program); } catch (e) { + let numErrors = checkDiagnostics(program, stderr, opts.disableWarning, options.reportDiagnostic, stderrColors.enabled); + if (numErrors) { + const err = Error(`${numErrors} compile error(s)`); + err.stack = err.message; + return prepareResult(err); + } crash("compile", e); } stats.compileTime += stats.end(begin); @@ -1005,6 +1053,24 @@ export async function main(argv, options) { stderr.write(`Skipped JavaScript binding (no output path)${EOL}`); } } + + // Write the RPC client module (@data codec + typed Server surface) + if (opts.rpcModule != null && opts.rpcModule.length) { + let begin = stats.begin(); + stats.emitCount++; + let source; + try { + source = assemblyscript.buildServerModule(program, opts.rpcRuntime || "toiljs/io"); + } catch (e) { + crash("buildServerModule", e); + } + stats.emitTime += stats.end(begin); + if (source != null) { + pending.push( + writeFile(opts.rpcModule, source, baseDir) + ); + } + } } try { @@ -1068,7 +1134,7 @@ export async function main(argv, options) { const BAR = stdoutColors.red("▌ "); console.error([ EOL, - BAR, "Whoops, the AssemblyScript compiler has crashed during ", stage, " :-(", EOL, + BAR, "Whoops, the ToilScript compiler has crashed during ", stage, " :-(", EOL, BAR, EOL, (typeof e.stack === "string" ? [ @@ -1084,7 +1150,7 @@ export async function main(argv, options) { ).join(""), BAR, EOL, BAR, "If you see where the error is, feel free to send us a pull request. If not,", EOL, - BAR, "please let us know: https://github.com/AssemblyScript/assemblyscript/issues", EOL, + BAR, "please let us know: https://github.com/dacely-cloud/toilscript/issues", EOL, BAR, EOL, BAR, "Thank you!", EOL ].join("")); @@ -1106,33 +1172,33 @@ async function getConfig(file, baseDir, readFile) { try { config = JSON.parse(contents); } catch(ex) { - throw new Error(`Asconfig is not valid json: ${location}`, { cause: ex }); + throw new Error(`Toilconfig is not valid json: ${location}`, { cause: ex }); } - // validate asconfig shape + // validate toilconfig shape if (config.options && !isObject(config.options)) { - throw new Error(`Asconfig.options is not an object: ${location}`); + throw new Error(`Toilconfig.options is not an object: ${location}`); } if (config.include && !Array.isArray(config.include)) { - throw new Error(`Asconfig.include is not an array: ${location}`); + throw new Error(`Toilconfig.include is not an array: ${location}`); } if (config.targets) { if (!isObject(config.targets)) { - throw new Error(`Asconfig.targets is not an object: ${location}`); + throw new Error(`Toilconfig.targets is not an object: ${location}`); } const targets = Object.keys(config.targets); for (let i = 0; i < targets.length; i++) { const target = targets[i]; if (!isObject(config.targets[target])) { - throw new Error(`Asconfig.targets.${target} is not an object: ${location}`); + throw new Error(`Toilconfig.targets.${target} is not an object: ${location}`); } } } if (config.extends && typeof config.extends !== "string") { - throw new Error(`Asconfig.extends is not a string: ${location}`); + throw new Error(`Toilconfig.extends is not a string: ${location}`); } return config; diff --git a/cli/options.json b/cli/options.json index f6776dbe26..487e445266 100644 --- a/cli/options.json +++ b/cli/options.json @@ -23,6 +23,11 @@ "type": "s", "cliOnly": true }, + "targetMode": { + "category": "General", + "description": "Toil compile surface mode: 'hot' (request/stream) or 'cold' (daemon). Omit for the legacy single-artifact build.", + "type": "s" + }, "optimize": { "category": "Optimization", @@ -76,6 +81,18 @@ "alias": "t", "isPath": true }, + "rpcModule": { + "category": "Output", + "description": "Emits a .ts module: the @data codec + the typed client-callable Server surface.", + "type": "s", + "isPath": true + }, + "rpcRuntime": { + "category": "Output", + "description": "Import specifier for the DataWriter/DataReader codec in the emitted RPC module.", + "type": "s", + "default": "toiljs/io" + }, "bindings": { "category": "Output", "description": [ diff --git a/dist/asc.d.ts b/dist/asc.d.ts deleted file mode 100644 index 17fcb31434..0000000000 --- a/dist/asc.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export * from "types:assemblyscript/cli/index"; -import * as asc from "types:assemblyscript/cli/index"; -export default asc; diff --git a/dist/assemblyscript.d.ts b/dist/assemblyscript.d.ts deleted file mode 100644 index 2b2e4a4403..0000000000 --- a/dist/assemblyscript.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/// -export * from "types:assemblyscript/src/index"; -import * as assemblyscript from "types:assemblyscript/src/index"; -export default assemblyscript; diff --git a/dist/cli.d.ts b/dist/cli.d.ts new file mode 100644 index 0000000000..ca4dd43454 --- /dev/null +++ b/dist/cli.d.ts @@ -0,0 +1,4 @@ +/// +export * from "types:toilscript/cli/index"; +import * as cli from "types:toilscript/cli/index"; +export default cli; diff --git a/dist/toilscript.d.ts b/dist/toilscript.d.ts new file mode 100644 index 0000000000..25f2aea59b --- /dev/null +++ b/dist/toilscript.d.ts @@ -0,0 +1,4 @@ +/// +export * from "types:toilscript/src/index"; +import * as assemblyscript from "types:toilscript/src/index"; +export default assemblyscript; diff --git a/dist/transform.d.ts b/dist/transform.d.ts index 14efe05e8f..1ed87fabff 100644 --- a/dist/transform.d.ts +++ b/dist/transform.d.ts @@ -1 +1 @@ -export { Transform } from "./asc"; +export { Transform } from "./cli"; diff --git a/eslint.config.js b/eslint.config.js index 4c53f86f2b..a35fd2d8e1 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,231 +1,333 @@ -import { defineConfig, globalIgnores } from "eslint/config"; - -import js from "@eslint/js"; +import eslint from "@eslint/js"; import tseslint from "typescript-eslint"; import globals from "globals"; -export default defineConfig([ - globalIgnores([ - "**/*.d.ts", - - "dist/**", - "lib/binaryen.js", - "lib/parse/index.js", - "build/**", - "raw/**", - - // Exclude AS sources with non-standard decorators - "src/glue/wasm/**/*.ts", - "std/assembly/**/*.ts", - - "tests/parser/**", - "tests/compiler/**", - "tests/asconfig/**", - "lib/loader/tests/**", - - // FIXME: Tagged template literal tests with invalid escapes - "tests/compiler/templateliteral.ts", - ]), - - js.configs.recommended, - ...tseslint.configs.recommended, - - { - files: ["**/*.{js,ts}"], - - languageOptions: { - parser: tseslint.parser, - ecmaVersion: 2024, - sourceType: "module", - globals: { - ...globals.es2024, - globalThis: "readonly", - BigInt64Array: "readonly", - BigUint64Array: "readonly", - WebAssembly: "readonly", - FinalizationRegistry: "readonly", - fetch: "readonly", - URL: "readonly", - console: "readonly", - }, +export default tseslint.config( + { + ignores: [ + "node_modules/**", + "dist/**", + "build/**", + "out/**", + ".github/**", + "tests/parser/**" + ] }, - plugins: { - "@typescript-eslint": tseslint.plugin, + + eslint.configs.recommended, + + // === General rules ========================================================= + + { + languageOptions: { + ecmaVersion: "latest", + sourceType: "module", + globals: { + "globalThis": "readonly", + "BigInt64Array": "readonly", + "BigUint64Array": "readonly", + "WebAssembly": "readonly", + "FinalizationRegistry": "readonly", + "fetch": "readonly", + "URL": "readonly", + "console": "readonly" + } + }, + rules: { + // Omitted semicolons are hugely popular, yet within the compiler it makes + // sense to be better safe than sorry. + "semi": "error", + + // Our code bases uses 2 spaces for indentation, and we enforce it here so + // files don't mix spaces, tabs or different indentation levels. + "indent": ["error", 2, { + "SwitchCase": 1, + "VariableDeclarator": "first", + "offsetTernaryExpressions": true, + "ignoredNodes": [ // FIXME: something's odd here + "ConditionalExpression > *", + "ConditionalExpression > * > *", + "ConditionalExpression > * > * > *" + ] + }], + + // This is mostly visual style, making comments look uniform. + "spaced-comment": ["error", "always", { + "markers": ["/"], // triple-slash + "exceptions": ["/"] // all slashes + }], + + // This tends to be annoying as it encourages developers to make everything + // that is never reassigned a 'const', sometimes semantically incorrect so, + // typically leading to huge diffs in follow-up PRs modifying affected code. + "prefer-const": "off", + + // It is perfectly fine to declare top-level variables with `var`, yet this + // rule doesn't provide configuration options that would help. + "no-var": "off", + "no-useless-assignment": "off", + "no-unassigned-vars": "off", + "preserve-caught-error": "off", + + // Quite often, dealing with multiple related cases at once or otherwise + // falling through is exactly the point of using a switch. + "no-fallthrough": "off", + + // Typical false-positives here are `do { ... } while (true)` statements or + // similar, but the only option provided here is not checking any loops. + "no-constant-condition": ["error", {checkLoops: false}], + + // Functions are nested in blocks occasionally, and there haven't been any + // problems with this so far, so turning the check off. + "no-inner-declarations": "off", + + // Disabled here, but enabled again for JavaScript files. + "no-unused-vars": "off", + } }, - rules: { - semi: "error", - - indent: ["error", 2, { - SwitchCase: 1, - VariableDeclarator: "first", - offsetTernaryExpressions: true, - ignoredNodes: [ - "ConditionalExpression > *", - "ConditionalExpression > * > *", - "ConditionalExpression > * > * > *", + // === JavaScript rules ==================================================== + + { + files: [ + "**/*.js", + "**/*.cjs", + "bin/*" + ], + languageOptions: { + globals: { + ...globals.browser, + ...globals.amd, + ...globals.node, + ...globals.es6 + } + }, + rules: { + // Enforcing to remove function parameters on stubs makes code less + // maintainable, so we instead allow unused function parameters. + "no-unused-vars": [ + "warn", { + "vars": "local", + "args": "none", + "ignoreRestSiblings": false + } ], - }], - "spaced-comment": ["error", "always", { - markers: ["/"], - exceptions: ["/"], - }], + "no-loss-of-precision": "error", + } + }, - "prefer-const": "off", - "no-var": "off", - "no-fallthrough": "off", + // === TypeScript rules ==================================================== + + { + files: [ + "**/*.ts" + ], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + experimentalDecorators: true, + allowInvalidAST: true, + ecmaFeatures: {} + } + }, + plugins: { + "@typescript-eslint": tseslint.plugin + }, + rules: { + // Quite common in scenarios where an iteration starts at `current = this`. + "@typescript-eslint/no-this-alias": "off", - "no-constant-condition": ["error", { checkLoops: false }], - "no-inner-declarations": "off", + // Interferes with tests and 64-bit literals + "@typescript-eslint/no-loss-of-precision": "off", + "no-loss-of-precision": "off", - "no-loss-of-precision": "off", - "no-unused-vars": "off", - "no-useless-assignment": "off", + // TypeScript handles this + "no-redeclare": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/no-unused-vars": "off", - }, - }, - - // === JavaScript === - { - files: ["**/*.js", "bin/*"], - - languageOptions: { - globals: { - ...globals.browser, - ...globals.amd, - ...globals.node, - ...globals.es6, - }, - }, + // Disabled here, but enabled again for TypeScript files. + "@typescript-eslint/no-unused-vars": "off", - rules: { - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", + // We use require in some places + "@typescript-eslint/no-require-imports": "off", - "no-unused-vars": ["warn", { - vars: "local", - args: "none", - ignoreRestSiblings: false, - }], + // Allow unused expressions (used in some code patterns) + "@typescript-eslint/no-unused-expressions": "off", - "@typescript-eslint/no-loss-of-precision": "error", - }, - }, - - // === TypeScript === - { - files: ["**/*.ts"], - - rules: { - "@typescript-eslint/no-unused-vars": ["warn", { - vars: "local", - varsIgnorePattern: "^[A-Z](?:From|To)?$", - args: "none", - ignoreRestSiblings: false, - }], + // Empty object types are used in definitions + "@typescript-eslint/no-empty-object-type": "off" + } }, - }, - - // === AssemblyScript === - { - files: [ - "**/assembly/**/*.ts", - "src/**/*.ts", - "lib/parse/src/**/*.ts", - ], - - rules: { - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-array-constructor": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-non-null-assertion": "off", + + { + files: [ + "**/*.ts" + ], + rules: { + // Enforcing to remove function parameters on stubs makes code less + // maintainable, so we instead allow unused function parameters. + "@typescript-eslint/no-unused-vars": [ + "warn", { + "vars": "local", + "varsIgnorePattern": "^[A-Z](?:From|To)?$", // ignore type params + "args": "none", + "ignoreRestSiblings": false + } + ] + } }, - }, - - // === Compiler === - { - files: [ - "src/**/*.ts", - "std/assembly/**/*.ts", - ], - - rules: { - "no-cond-assign": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/triple-slash-reference": "off", - "no-shadow-restricted-names": "off", - "@typescript-eslint/ban-types": "off", + + // === ToilScript rules (extends TypeScript rules) ===================== + + { + files: [ + "**/assembly/**/*.ts", + "src/**/*.ts", + "lib/parse/src/**/*.ts" + ], + rules: { + // ToilScript has its own globals + "no-undef": "off", + + // Namespaces are quite useful in ToilScript + "@typescript-eslint/no-namespace": "off", + + // There is actually codegen difference here + "@typescript-eslint/no-array-constructor": "off", + + // Sometimes it can't be avoided to add a @ts-ignore + "@typescript-eslint/ban-ts-comment": "off", + + // Utilized to achieve portability in some cases + "@typescript-eslint/no-non-null-assertion": "off", + } }, - }, - // === Standard Library === - { - files: ["std/assembly/**/*.ts"], + // === Compiler rules (extends ToilScript rules) ======================= - rules: { - "no-shadow-restricted-names": "off", - "@typescript-eslint/ban-types": "off", + { + files: [ + "src/**/*.ts", + "std/assembly/**/*.ts" + ], + rules: { + // There is an actual codegen difference here - TODO: revisit + "no-cond-assign": "off", + + // Not all types can be omitted in AS yet - TODO: revisit + "@typescript-eslint/no-inferrable-types": "off", + + // Used rarely to reference internals that are not user-visible + "@typescript-eslint/triple-slash-reference": "off", + + // The compiler has its own `Function` class for example + "no-shadow-restricted-names": "off", + "@typescript-eslint/ban-types": "off" + } }, - }, - // === Definition files === - { - files: ["std/**/*.d.ts"], + // === Standard Library rules (extends ToilScript rules) =============== + + { + files: [ + "std/assembly/**/*.ts" + ], + rules: { + // We are implementing with --noLib, so we shadow all the time + "no-shadow-restricted-names": "off", - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/ban-types": "off", + // Similarly, sometimes we need the return type to be String, not string + "@typescript-eslint/ban-types": "off" + } }, - }, - // === Dist definitions === - { - files: ["./dist/*.d.ts"], + // === Standard Definition rules (extends TypeScript rules) ================ - rules: { - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/triple-slash-reference": "off", + { + files: [ + "std/**/*.d.ts" + ], + rules: { + // Definition files have their own globals + "no-undef": "off", + + // Often required to achieve compatibility with TypeScript + "@typescript-eslint/no-explicit-any": "off", + + // Interfaces can be stubs here, i.e. not yet fully implemented + "@typescript-eslint/no-empty-object-type": "off", + + // Definitions make use of `object` to model rather unusual constraints + "@typescript-eslint/ban-types": "off" + } }, - }, - - // === Tests === - { - files: [ - "./tests/compiler/**/*.ts", - "./lib/loader/tests/assembly/**/*.ts", - ], - - rules: { - "no-empty": "off", - "no-cond-assign": "off", - "no-compare-neg-zero": "off", - "no-inner-declarations": "off", - "no-constant-condition": "off", - "use-isnan": "off", - - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-extra-semi": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/triple-slash-reference": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/no-extra-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", + + // === Compiler Definition rules (extends TypeScript rules) ================ + + { + files: [ + "./dist/*.d.ts" + ], + rules: { + // Our definitions are complicated, and all attempts to describe them + // as modules have failed so far. As such, we re-export namespaces. + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/triple-slash-reference": "off" + } + }, + + // === Other Definition rules ============================================== + + { + files: [ + "**/*.d.ts" + ], + rules: { + // Definition files have their own globals + "no-undef": "off" + } }, - }, - { - files: ["tests/transform/cjs/**/*.js"], - rules: { - "@typescript-eslint/no-require-imports": "off", + // === Test rules (extends TypeScript rules) =============================== + + { + files: [ + "./tests/compiler/**/*.ts", + "./lib/loader/tests/assembly/**/*.ts" + ], + rules: { + // Test files have their own globals + "no-undef": "off", + + // Tests typically include unusual code patterns on purpose. This is + // very likely not an extensive list, but covers what's there so far. + "no-empty": "off", + "no-cond-assign": "off", + "no-compare-neg-zero": "off", + "no-inner-declarations": "off", + "no-constant-condition": "off", + "no-constant-binary-expression": "off", + "no-const-assign": "off", + "no-this-before-super": "off", + "no-unreachable": "off", + "no-dupe-class-members": "off", + "no-dupe-args": "off", + "constructor-super": "off", + "use-isnan": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-extra-semi": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/triple-slash-reference": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/no-extra-non-null-assertion": "off", + "@typescript-eslint/no-empty-object-type": "off" + } }, - }, -]); +); diff --git a/lib/README.md b/lib/README.md index 9ac01cc665..62dabf24c0 100644 --- a/lib/README.md +++ b/lib/README.md @@ -5,8 +5,8 @@ Additional packages provided by the main package. | Package | Description |------------------------------------|------------------------- -| [@assemblyscript/loader](./loader) | Module loader utility -| [@assemblyscript/rtrace](./rtrace) | Runtime tracing utility +| [@dacely/toilscript-loader](./loader) | Module loader utility +| [@toilscript/rtrace](./rtrace) | Runtime tracing utility | binaryen | Binaryen proxy The Binaryen proxy herein is imported accross the code base and forwards the diff --git a/lib/loader/README.md b/lib/loader/README.md index ff1e805977..d8920ea862 100644 --- a/lib/loader/README.md +++ b/lib/loader/README.md @@ -1,13 +1,13 @@ -# AssemblyScript Loader +# ToilScript Loader -A tiny module loader that makes working with AssemblyScript modules as convenient as it gets without sacrificing efficiency. It about mirrors the relevant parts of the WebAssembly API while also providing utility to allocate and read strings, arrays and classes. +`@dacely/toilscript-loader` — a tiny module loader that makes working with ToilScript modules as convenient as it gets without sacrificing efficiency. It about mirrors the relevant parts of the WebAssembly API while also providing utility to allocate and read strings, arrays and classes. -**DEPRECATION NOTICE:** The loader has been deprecated in AssemblyScript 0.20. It will likely continue to work for a while, but it is recommended to switch to the new [static bindings](https://www.assemblyscript.org/compiler.html#host-bindings) generation. +**NOTE:** This mirrors the original ToilScript loader (which upstream deprecated in 0.20 in favor of [static bindings](https://toil.org/compiler.html#host-bindings)). It is provided for ToilScript modules that still use the loader pattern. ## Example ```ts -import loader from "@assemblyscript/loader"; // or require +import loader from "@dacely/toilscript-loader"; // or require loader.instantiate( // Binary to instantiate fetch("optimized.wasm"), // or fs.readFileSync @@ -24,19 +24,19 @@ The loader basically instantiates the module using `WebAssembly` APIs, but also ## Installation -The loader can be installed from [npm](https://www.npmjs.com/package/@assemblyscript/loader): +The loader can be installed from [npm](https://www.npmjs.com/package/@dacely/toilscript-loader): ```sh -npm install --save @assemblyscript/loader +npm install --save @dacely/toilscript-loader ``` On the web: ```html - + - + ``` ## Usage @@ -44,7 +44,7 @@ On the web: One task the loader does not perform is to implicitly translate between WebAssembly pointers and JavaScript objects, and that's where the mixed in utility comes into play. For example, if one has ```ts -// AssemblyScript +// ToilScript export function concat(a: string, b: string): string { return a + b } @@ -73,7 +73,7 @@ console.log(doConcat("Hello ", "world!")) Arrays (or more advanced classes for that matter) require a bit more cooperation because we need to know their value type in order to work with them properly. To achieve this, every class has a unique id internally, and a chunk of runtime type information (RTTI) is shipped with the module to evaluate class types. Here's an example of working with an `Int32Array`: ```ts -// AssemblyScript +// ToilScript export function sum(arr: Int32Array): i32 { let sum = 0 for (let i = 0, k = arr.length; i < k; ++i) { @@ -104,7 +104,7 @@ This works with all kinds of arrays, except that ids are different and values ar If one is instead interested in the values of an array being returned by the module, there are two approaches to this. Let's say we have the following module: ```ts -// AssemblyScript +// ToilScript export function getRandomArray(len: i32): Int32Array { const arr = new Int32Array(len) // fill with random values @@ -153,7 +153,7 @@ The latter variant can be more efficient (and useful) but is a little dangerous As mentioned earlier, the loader understands how to make a nice object structure of a module's exports, and it is possible to utilize it to work with classes in a more natural way. For example, when calling the following function externally ```ts -// AssemblyScript +// ToilScript export class Foo { constructor(public str: string) {} getString(): string { @@ -196,7 +196,7 @@ Copying from and extending the examples above is typically sufficient. imports?: WasmImports ): Promise ``` - Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. + Asynchronously instantiates an ToilScript module from anything that can be instantiated. * ```ts function instantiateSync( @@ -204,7 +204,7 @@ Copying from and extending the examples above is typically sufficient. imports?: WasmImports ): ASUtil & T ``` - Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. Not recommended. + Synchronously instantiates an ToilScript module from a WebAssembly.Module or binary buffer. Not recommended. * ```ts function instantiateStreaming( @@ -212,7 +212,7 @@ Copying from and extending the examples above is typically sufficient. imports?: WasmImports ): Promise ``` - Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by fetch. + Asynchronously instantiates an ToilScript module from a response, i.e. as obtained by fetch. * ```ts function demangle( @@ -220,7 +220,7 @@ Copying from and extending the examples above is typically sufficient. baseModule?: Object ): T ``` - Demangles an AssemblyScript module's exports to a friendly object structure. You usually don't have to call this manually as instantiation does this implicitly. + Demangles an ToilScript module's exports to a friendly object structure. You usually don't have to call this manually as instantiation does this implicitly. Note that `T` above can either be omitted if the shape of the module is unknown, or can reference a `.d.ts` (i.e. `typeof MyModule`) as produced by the compiler with the `-d` option. @@ -293,7 +293,7 @@ Making the loader's API any more convenient has its tradeoffs. One would either ### More convenient tools -* [as-bind](https://github.com/torch2424/as-bind) is a library, built on top of the loader, to make passing high-level data structures between AssemblyScript and JavaScript more convenient. +* [as-bind](https://github.com/torch2424/as-bind) is a library, built on top of the loader, to make passing high-level data structures between ToilScript and JavaScript more convenient. ## Advanced usage diff --git a/lib/loader/index.d.ts b/lib/loader/index.d.ts index 39b3dd75ed..7de3e44185 100644 --- a/lib/loader/index.d.ts +++ b/lib/loader/index.d.ts @@ -99,25 +99,25 @@ export interface ASUtil { __collect(incremental?: boolean): void; } -/** Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. */ +/** Asynchronously instantiates an ToilScript module from anything that can be instantiated. */ export declare function instantiate>( source: WebAssembly.Module | BufferSource | Response | PromiseLike, imports?: Imports ): Promise; -/** Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. */ +/** Synchronously instantiates an ToilScript module from a WebAssembly.Module or binary buffer. */ export declare function instantiateSync>( source: WebAssembly.Module | BufferSource, imports?: Imports ): ResultObject & { exports: ASUtil & T }; -/** Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by `fetch`. */ +/** Asynchronously instantiates an ToilScript module from a response, i.e. as obtained by `fetch`. */ export declare function instantiateStreaming>( source: Response | PromiseLike, imports?: Imports ): Promise; -/** Demangles an AssemblyScript module's exports to a friendly object structure. */ +/** Demangles an ToilScript module's exports to a friendly object structure. */ export declare function demangle>( exports: Record, extendedExports?: Record diff --git a/lib/loader/index.js b/lib/loader/index.js index 3c97d7b741..ece051e198 100644 --- a/lib/loader/index.js +++ b/lib/loader/index.js @@ -329,7 +329,7 @@ function isModule(src) { return src instanceof WebAssembly.Module; } -/** Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. */ +/** Asynchronously instantiates an ToilScript module from anything that can be instantiated. */ export async function instantiate(source, imports = {}) { if (isResponse(source = await source)) return instantiateStreaming(source, imports); const module = isModule(source) ? source : await WebAssembly.compile(source); @@ -339,7 +339,7 @@ export async function instantiate(source, imports = {}) { return { module, instance, exports }; } -/** Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. */ +/** Synchronously instantiates an ToilScript module from a WebAssembly.Module or binary buffer. */ export function instantiateSync(source, imports = {}) { const module = isModule(source) ? source : new WebAssembly.Module(source); const extended = preInstantiate(imports); @@ -348,7 +348,7 @@ export function instantiateSync(source, imports = {}) { return { module, instance, exports }; } -/** Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by `fetch`. */ +/** Asynchronously instantiates an ToilScript module from a response, i.e. as obtained by `fetch`. */ export async function instantiateStreaming(source, imports = {}) { if (!WebAssembly.instantiateStreaming) { return instantiate( @@ -364,7 +364,7 @@ export async function instantiateStreaming(source, imports = {}) { return { ...result, exports }; } -/** Demangles an AssemblyScript module's exports to a friendly object structure. */ +/** Demangles an ToilScript module's exports to a friendly object structure. */ export function demangle(exports, extendedExports = {}) { const setArgumentsLength = exports["__argumentsLength"] ? length => { exports["__argumentsLength"].value = length; } diff --git a/lib/loader/package-lock.json b/lib/loader/package-lock.json index a6d2d6962f..42c43bc9a0 100644 --- a/lib/loader/package-lock.json +++ b/lib/loader/package-lock.json @@ -1,73 +1,64 @@ { - "name": "@assemblyscript/loader", + "name": "@dacely/toilscript-loader", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@assemblyscript/loader", + "name": "@dacely/toilscript-loader", "version": "0.0.0", "license": "Apache-2.0", "devDependencies": { - "esm2umd": "^0.1.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "esm2umd": "^0.3.1" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", - "convert-source-map": "^1.7.0", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -78,210 +69,144 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.2" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/types": "^7.29.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -289,145 +214,121 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "engines": { - "node": ">=6.0.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": ">=4" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" + "node": ">=6.0.0" } }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -437,14 +338,19 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -453,23 +359,10 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001344", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", - "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", + "version": "1.0.30001777", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz", + "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==", "dev": true, "funding": [ { @@ -479,54 +372,29 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + ], + "license": "CC-BY-4.0" }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -537,158 +405,65 @@ } } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.141", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.141.tgz", - "integrity": "sha512-mfBcbqc0qc6RlxrsIgLG2wCqkiPAjEezHxGTu7p3dHHFOurH4EjS9rFZndX5axC8264rI1Pcbw8uQP39oZckeA==", - "dev": true + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", + "dev": true, + "license": "ISC" }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/esm2umd": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/esm2umd/-/esm2umd-0.1.2.tgz", - "integrity": "sha512-SoCump2d/jzZJ9/0ZY/2AVOWJbyd5bGOMlRSSNqChPvQrwa9Rqzo9wPP+kT77Gys03Sb+rIgseAReVvIrqvglA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/esm2umd/-/esm2umd-0.3.1.tgz", + "integrity": "sha512-5WcGtkITdTHoLSkM/ZGWgsieCvlPUJLJdGOAmnmXPjjNBU/lwMGg3D4Tx/FWe32pY0ZhhAwoM8Oy+1hBI7BKQg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7", - "@babel/plugin-transform-modules-commonjs": "^7" + "@babel/core": "^7.26.8", + "@babel/helper-plugin-utils": "^7.26.5" }, "bin": { "esm2umd": "bin/esm2umd.js" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json5": { @@ -696,6 +471,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -703,653 +479,84 @@ "node": ">=6" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "dev": true - }, - "@babel/core": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz", - "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dev": true, - "requires": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "bin": { + "update-browserslist-db": "cli.js" }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "dev": true, - "requires": { - "@babel/types": "^7.18.2" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "dev": true - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001344", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz", - "integrity": "sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "electron-to-chromium": { - "version": "1.4.141", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.141.tgz", - "integrity": "sha512-mfBcbqc0qc6RlxrsIgLG2wCqkiPAjEezHxGTu7p3dHHFOurH4EjS9rFZndX5axC8264rI1Pcbw8uQP39oZckeA==", - "dev": true - }, - "escalade": { + "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "esm2umd": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/esm2umd/-/esm2umd-0.1.2.tgz", - "integrity": "sha512-SoCump2d/jzZJ9/0ZY/2AVOWJbyd5bGOMlRSSNqChPvQrwa9Rqzo9wPP+kT77Gys03Sb+rIgseAReVvIrqvglA==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "requires": { - "@babel/core": "^7", - "@babel/plugin-transform-modules-commonjs": "^7" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "license": "ISC" } } } diff --git a/lib/loader/package.json b/lib/loader/package.json index c62c4dc63d..cffbeabb01 100644 --- a/lib/loader/package.json +++ b/lib/loader/package.json @@ -1,28 +1,31 @@ { - "name": "@assemblyscript/loader", - "description": "A convenient loader for AssemblyScript modules.", + "name": "@dacely/toilscript-loader", + "description": "A convenient loader for ToilScript modules.", "keywords": [ - "assemblyscript", + "toilscript", "loader", "glue", "interop", "webassembly", "wasm" ], - "version": "0.0.0", + "version": "0.1.0", "author": "Daniel Wirtz ", "contributors": [ "MaxGraey " ], "license": "Apache-2.0", - "homepage": "https://assemblyscript.org", + "homepage": "https://github.com/dacely-cloud/toilscript", "repository": { "type": "git", - "url": "https://github.com/AssemblyScript/assemblyscript.git", + "url": "https://github.com/dacely-cloud/toilscript.git", "directory": "lib/loader" }, "bugs": { - "url": "https://github.com/AssemblyScript/assemblyscript/issues" + "url": "https://github.com/dacely-cloud/toilscript/issues" + }, + "publishConfig": { + "access": "public" }, "type": "module", "main": "./umd/index.js", @@ -33,8 +36,8 @@ }, "scripts": { "asbuild": "npm run asbuild:default && npm run asbuild:legacy", - "asbuild:default": "node ../../bin/asc tests/assembly/index.ts --outFile tests/build/default.wasm --exportRuntime --exportTable", - "asbuild:legacy": "node ../../bin/asc tests/assembly/index.ts --disable mutable-globals --outFile tests/build/legacy.wasm --exportRuntime --exportTable", + "asbuild:default": "node ../../bin/toilscript tests/assembly/index.ts --outFile tests/build/default.wasm --exportRuntime --exportTable", + "asbuild:legacy": "node ../../bin/toilscript tests/assembly/index.ts --disable mutable-globals --outFile tests/build/legacy.wasm --exportRuntime --exportTable", "build": "npx esm2umd loader index.js > umd/index.js", "test": "node tests && node tests/umd" }, @@ -48,6 +51,6 @@ "README.md" ], "devDependencies": { - "esm2umd": "^0.1.2" + "esm2umd": "^0.3.1" } } diff --git a/lib/loader/tests/build/default.wasm b/lib/loader/tests/build/default.wasm index b9188bb52e..fa45ab76ac 100644 Binary files a/lib/loader/tests/build/default.wasm and b/lib/loader/tests/build/default.wasm differ diff --git a/lib/loader/tests/build/legacy.wasm b/lib/loader/tests/build/legacy.wasm index b9188bb52e..fa45ab76ac 100644 Binary files a/lib/loader/tests/build/legacy.wasm and b/lib/loader/tests/build/legacy.wasm differ diff --git a/lib/loader/tests/index.js b/lib/loader/tests/index.js index 48d008b0da..15408daa5f 100644 --- a/lib/loader/tests/index.js +++ b/lib/loader/tests/index.js @@ -222,9 +222,9 @@ function test(file) { { let ptr = exports.__newString("test"); exports.__pin(ptr); - try { exports.__pin(ptr); assert(false); } catch (e) { /* nop */ } + try { exports.__pin(ptr); assert(false); } catch { /* nop */ } exports.__unpin(ptr); - try { exports.__unpin(ptr); assert(false); } catch (e) { /* nop */ } + try { exports.__unpin(ptr); assert(false); } catch { /* nop */ } } // should be able to correctly call a function with variable arguments diff --git a/lib/loader/umd/index.js b/lib/loader/umd/index.js index 3625fc2cc7..8604a408f5 100644 --- a/lib/loader/umd/index.js +++ b/lib/loader/umd/index.js @@ -1,41 +1,64 @@ // GENERATED FILE. DO NOT EDIT. -var loader = (function(exports) { +(function (global, factory) { + function preferDefault(exports) { + return exports.default || exports; + } + if (typeof define === "function" && define.amd) { + define([], function () { + var exports = {}; + factory(exports); + return preferDefault(exports); + }); + } else if (typeof exports === "object") { + factory(exports); + if (typeof module === "object") module.exports = preferDefault(exports); + } else { + (function () { + var exports = {}; + factory(exports); + global.loader = preferDefault(exports); + })(); + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) { "use strict"; - - Object.defineProperty(exports, "__esModule", { + + Object.defineProperty(_exports, "__esModule", { value: true }); - exports.instantiate = instantiate; - exports.instantiateSync = instantiateSync; - exports.instantiateStreaming = instantiateStreaming; - exports.demangle = demangle; - exports.default = void 0; + _exports.default = void 0; + _exports.demangle = demangle; + _exports.instantiate = instantiate; + _exports.instantiateStreaming = instantiateStreaming; + _exports.instantiateSync = instantiateSync; // Runtime header offsets const ID_OFFSET = -8; - const SIZE_OFFSET = -4; // Runtime ids + const SIZE_OFFSET = -4; + + // Runtime ids // const OBJECT_ID = 0; - const ARRAYBUFFER_ID = 1; - const STRING_ID = 2; // Runtime type information - + const STRING_ID = 2; + + // Runtime type information const ARRAYBUFFERVIEW = 1 << 0; const ARRAY = 1 << 1; - const STATICARRAY = 1 << 2; // const SET = 1 << 3; + const STATICARRAY = 1 << 2; + // const SET = 1 << 3; // const MAP = 1 << 4; - - const VAL_ALIGN_OFFSET = 6; // const VAL_ALIGN = 1 << VAL_ALIGN_OFFSET; - + const VAL_ALIGN_OFFSET = 6; + // const VAL_ALIGN = 1 << VAL_ALIGN_OFFSET; const VAL_SIGNED = 1 << 11; - const VAL_FLOAT = 1 << 12; // const VAL_NULLABLE = 1 << 13; - - const VAL_MANAGED = 1 << 14; // const KEY_ALIGN_OFFSET = 15; + const VAL_FLOAT = 1 << 12; + // const VAL_NULLABLE = 1 << 13; + const VAL_MANAGED = 1 << 14; + // const KEY_ALIGN_OFFSET = 15; // const KEY_ALIGN = 1 << KEY_ALIGN_OFFSET; // const KEY_SIGNED = 1 << 20; // const KEY_FLOAT = 1 << 21; // const KEY_NULLABLE = 1 << 22; // const KEY_MANAGED = 1 << 23; + // Array(BufferView) layout - const ARRAYBUFFERVIEW_BUFFER_OFFSET = 0; const ARRAYBUFFERVIEW_DATASTART_OFFSET = 4; const ARRAYBUFFERVIEW_BYTELENGTH_OFFSET = 8; @@ -44,158 +67,126 @@ var loader = (function(exports) { const ARRAY_SIZE = 16; const E_NO_EXPORT_TABLE = "Operation requires compiling with --exportTable"; const E_NO_EXPORT_RUNTIME = "Operation requires compiling with --exportRuntime"; - const F_NO_EXPORT_RUNTIME = () => { throw Error(E_NO_EXPORT_RUNTIME); }; - const BIGINT = typeof BigUint64Array !== "undefined"; const THIS = Symbol(); const STRING_SMALLSIZE = 192; // break-even point in V8 - const STRING_CHUNKSIZE = 1024; // mitigate stack overflow - const utf16 = new TextDecoder("utf-16le", { fatal: true }); // != wtf16 - + /** polyfill for Object.hasOwn */ - Object.hasOwn = Object.hasOwn || function (obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }; + /** Gets a string from memory. */ - - function getStringImpl(buffer, ptr) { let len = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2] >>> 1; const wtf16 = new Uint16Array(buffer, ptr, len); if (len <= STRING_SMALLSIZE) return String.fromCharCode(...wtf16); - try { return utf16.decode(wtf16); } catch { let str = "", off = 0; - while (len - off > STRING_CHUNKSIZE) { str += String.fromCharCode(...wtf16.subarray(off, off += STRING_CHUNKSIZE)); } - return str + String.fromCharCode(...wtf16.subarray(off)); } } + /** Prepares the base module prior to instantiation. */ - - function preInstantiate(imports) { const extendedExports = {}; - function getString(memory, ptr) { if (!memory) return ""; return getStringImpl(memory.buffer, ptr); - } // add common imports used by stdlib for convenience - - + } + + // add common imports used by stdlib for convenience const env = imports.env = imports.env || {}; - env.abort = env.abort || function abort(msg, file, line, colm) { const memory = extendedExports.memory || env.memory; // prefer exported, otherwise try imported - throw Error(`abort: ${getString(memory, msg)} at ${getString(memory, file)}:${line}:${colm}`); }; - env.trace = env.trace || function trace(msg, n, ...args) { const memory = extendedExports.memory || env.memory; console.log(`trace: ${getString(memory, msg)}${n ? " " : ""}${args.slice(0, n).join(", ")}`); }; - env.seed = env.seed || Date.now; imports.Math = imports.Math || Math; imports.Date = imports.Date || Date; return extendedExports; } + /** Prepares the final module once instantiation is complete. */ - - function postInstantiate(extendedExports, instance) { const exports = instance.exports; const memory = exports.memory; const table = exports.table; - const __new = exports.__new || F_NO_EXPORT_RUNTIME; - const __pin = exports.__pin || F_NO_EXPORT_RUNTIME; - const __unpin = exports.__unpin || F_NO_EXPORT_RUNTIME; - const __collect = exports.__collect || F_NO_EXPORT_RUNTIME; - const __rtti_base = exports.__rtti_base; const getTypeinfoCount = __rtti_base ? arr => arr[__rtti_base >>> 2] : F_NO_EXPORT_RUNTIME; extendedExports.__new = __new; extendedExports.__pin = __pin; extendedExports.__unpin = __unpin; extendedExports.__collect = __collect; + /** Gets the runtime type info for the given id. */ - function getTypeinfo(id) { const U32 = new Uint32Array(memory.buffer); if ((id >>>= 0) >= getTypeinfoCount(U32)) throw Error(`invalid id: ${id}`); return U32[(__rtti_base + 4 >>> 2) + id]; } + /** Gets and validates runtime type info for the given id for array like objects */ - - function getArrayInfo(id) { const info = getTypeinfo(id); if (!(info & (ARRAYBUFFERVIEW | ARRAY | STATICARRAY))) throw Error(`not an array: ${id}, flags=${info}`); return info; } + /** Gets the runtime alignment of a collection's values. */ - - function getValueAlign(info) { return 31 - Math.clz32(info >>> VAL_ALIGN_OFFSET & 31); // -1 if none } + /** Gets the runtime alignment of a collection's keys. */ // function getKeyAlign(info) { // return 31 - Math.clz32((info >>> KEY_ALIGN_OFFSET) & 31); // -1 if none // } - + /** Allocates a new string in the module's memory and returns its pointer. */ - - function __newString(str) { if (str == null) return 0; const length = str.length; - const ptr = __new(length << 1, STRING_ID); - const U16 = new Uint16Array(memory.buffer); - for (let i = 0, p = ptr >>> 1; i < length; ++i) U16[p + i] = str.charCodeAt(i); - return ptr; } - extendedExports.__newString = __newString; + /** Allocates a new ArrayBuffer in the module's memory and returns its pointer. */ - function __newArrayBuffer(buf) { if (buf == null) return 0; const bufview = new Uint8Array(buf); - const ptr = __new(bufview.length, ARRAYBUFFER_ID); - const U8 = new Uint8Array(memory.buffer); U8.set(bufview, ptr); return ptr; } - extendedExports.__newArrayBuffer = __newArrayBuffer; + /** Reads a string from the module's memory by its pointer. */ - function __getString(ptr) { if (!ptr) return null; const buffer = memory.buffer; @@ -203,18 +194,15 @@ var loader = (function(exports) { if (id !== STRING_ID) throw Error(`not a string: ${ptr}`); return getStringImpl(buffer, ptr); } - extendedExports.__getString = __getString; + /** Gets the view matching the specified alignment, signedness and floatness. */ - function getView(alignLog2, signed, float) { const buffer = memory.buffer; - if (float) { switch (alignLog2) { case 2: return new Float32Array(buffer); - case 3: return new Float64Array(buffer); } @@ -222,43 +210,32 @@ var loader = (function(exports) { switch (alignLog2) { case 0: return new (signed ? Int8Array : Uint8Array)(buffer); - case 1: return new (signed ? Int16Array : Uint16Array)(buffer); - case 2: return new (signed ? Int32Array : Uint32Array)(buffer); - case 3: return new (signed ? BigInt64Array : BigUint64Array)(buffer); } } - throw Error(`unsupported align: ${alignLog2}`); } + /** Allocates a new array in the module's memory and returns its pointer. */ - - function __newArray(id, valuesOrCapacity = 0) { const input = valuesOrCapacity; const info = getArrayInfo(id); const align = getValueAlign(info); const isArrayLike = typeof input !== "number"; const length = isArrayLike ? input.length : input; - const buf = __new(length << align, info & STATICARRAY ? id : ARRAYBUFFER_ID); - let result; - if (info & STATICARRAY) { result = buf; } else { __pin(buf); - const arr = __new(info & ARRAY ? ARRAY_SIZE : ARRAYBUFFERVIEW_SIZE, id); - __unpin(buf); - const U32 = new Uint32Array(memory.buffer); U32[arr + ARRAYBUFFERVIEW_BUFFER_OFFSET >>> 2] = buf; U32[arr + ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2] = buf; @@ -266,11 +243,9 @@ var loader = (function(exports) { if (info & ARRAY) U32[arr + ARRAY_LENGTH_OFFSET >>> 2] = length; result = arr; } - if (isArrayLike) { const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT); const start = buf >>> align; - if (info & VAL_MANAGED) { for (let i = 0; i < length; ++i) { view[start + i] = input[i]; @@ -279,13 +254,11 @@ var loader = (function(exports) { view.set(input, start); } } - return result; } - extendedExports.__newArray = __newArray; + /** Gets a live view on an array's values in the module's memory. Infers the array type from RTTI. */ - function __getArrayView(arr) { const U32 = new Uint32Array(memory.buffer); const id = U32[arr + ID_OFFSET >>> 2]; @@ -295,88 +268,75 @@ var loader = (function(exports) { const length = info & ARRAY ? U32[arr + ARRAY_LENGTH_OFFSET >>> 2] : U32[buf + SIZE_OFFSET >>> 2] >>> align; return getView(align, info & VAL_SIGNED, info & VAL_FLOAT).subarray(buf >>>= align, buf + length); } - extendedExports.__getArrayView = __getArrayView; + /** Copies an array's values from the module's memory. Infers the array type from RTTI. */ - function __getArray(arr) { const input = __getArrayView(arr); - const len = input.length; const out = new Array(len); - for (let i = 0; i < len; i++) out[i] = input[i]; - return out; } - extendedExports.__getArray = __getArray; + /** Copies an ArrayBuffer's value from the module's memory. */ - function __getArrayBuffer(ptr) { const buffer = memory.buffer; const length = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2]; return buffer.slice(ptr, ptr + length); } - extendedExports.__getArrayBuffer = __getArrayBuffer; + /** Gets a function from poiner which contain table's index. */ - function __getFunction(ptr) { if (!table) throw Error(E_NO_EXPORT_TABLE); const index = new Uint32Array(memory.buffer)[ptr >>> 2]; return table.get(index); } - extendedExports.__getFunction = __getFunction; + /** Copies a typed array's values from the module's memory. */ - function getTypedArray(Type, alignLog2, ptr) { return new Type(getTypedArrayView(Type, alignLog2, ptr)); } + /** Gets a live view on a typed array's values in the module's memory. */ - - function getTypedArrayView(Type, alignLog2, ptr) { const buffer = memory.buffer; const U32 = new Uint32Array(buffer); return new Type(buffer, U32[ptr + ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2], U32[ptr + ARRAYBUFFERVIEW_BYTELENGTH_OFFSET >>> 2] >>> alignLog2); } + /** Attach a set of get TypedArray and View functions to the exports. */ - - function attachTypedArrayFunctions(ctor, name, align) { extendedExports[`__get${name}`] = getTypedArray.bind(null, ctor, align); extendedExports[`__get${name}View`] = getTypedArrayView.bind(null, ctor, align); } - [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array].forEach(ctor => { attachTypedArrayFunctions(ctor, ctor.name, 31 - Math.clz32(ctor.BYTES_PER_ELEMENT)); }); - if (BIGINT) { [BigUint64Array, BigInt64Array].forEach(ctor => { attachTypedArrayFunctions(ctor, ctor.name.slice(3), 3); }); - } // Pull basic exports to extendedExports so code in preInstantiate can use them - - + } + + // Pull basic exports to extendedExports so code in preInstantiate can use them extendedExports.memory = extendedExports.memory || memory; - extendedExports.table = extendedExports.table || table; // Demangle exports and provide the usual utility on the prototype - + extendedExports.table = extendedExports.table || table; + + // Demangle exports and provide the usual utility on the prototype return demangle(exports, extendedExports); } - function isResponse(src) { return typeof Response !== "undefined" && src instanceof Response; } - function isModule(src) { return src instanceof WebAssembly.Module; } - /** Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. */ - - + + /** Asynchronously instantiates an ToilScript module from anything that can be instantiated. */ async function instantiate(source, imports = {}) { if (isResponse(source = await source)) return instantiateStreaming(source, imports); const module = isModule(source) ? source : await WebAssembly.compile(source); @@ -389,9 +349,8 @@ var loader = (function(exports) { exports }; } - /** Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. */ - - + + /** Synchronously instantiates an ToilScript module from a WebAssembly.Module or binary buffer. */ function instantiateSync(source, imports = {}) { const module = isModule(source) ? source : new WebAssembly.Module(source); const extended = preInstantiate(imports); @@ -403,61 +362,49 @@ var loader = (function(exports) { exports }; } - /** Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by `fetch`. */ - - + + /** Asynchronously instantiates an ToilScript module from a response, i.e. as obtained by `fetch`. */ async function instantiateStreaming(source, imports = {}) { if (!WebAssembly.instantiateStreaming) { return instantiate(isResponse(source = await source) ? source.arrayBuffer() : source, imports); } - const extended = preInstantiate(imports); const result = await WebAssembly.instantiateStreaming(source, imports); const exports = postInstantiate(extended, result.instance); - return { ...result, + return { + ...result, exports }; } - /** Demangles an AssemblyScript module's exports to a friendly object structure. */ - - + + /** Demangles an ToilScript module's exports to a friendly object structure. */ function demangle(exports, extendedExports = {}) { const setArgumentsLength = exports["__argumentsLength"] ? length => { exports["__argumentsLength"].value = length; - } : exports["__setArgumentsLength"] || exports["__setargc"] || (() => { - /* nop */ - }); - + } : exports["__setArgumentsLength"] || exports["__setargc"] || (() => {/* nop */}); for (let internalName of Object.keys(exports)) { const elem = exports[internalName]; let parts = internalName.split("."); let curr = extendedExports; - while (parts.length > 1) { let part = parts.shift(); if (!Object.hasOwn(curr, part)) curr[part] = {}; curr = curr[part]; } - let name = parts[0]; let hash = name.indexOf("#"); - if (hash >= 0) { const className = name.substring(0, hash); const classElem = curr[className]; - if (typeof classElem === "undefined" || !classElem.prototype) { const ctor = function (...args) { return ctor.wrap(ctor.prototype.constructor(0, ...args)); }; - ctor.prototype = { valueOf() { return this[THIS]; } - }; - ctor.wrap = function (thisValue) { return Object.create(ctor.prototype, { [THIS]: { @@ -466,14 +413,11 @@ var loader = (function(exports) { } }); }; - if (classElem) Object.getOwnPropertyNames(classElem).forEach(name => Object.defineProperty(ctor, name, Object.getOwnPropertyDescriptor(classElem, name))); curr[className] = ctor; } - name = name.substring(hash + 1); curr = curr[className].prototype; - if (/^(get|set):/.test(name)) { if (!Object.hasOwn(curr, name = name.substring(4))) { let getter = exports[internalName.replace("set:", "get:")]; @@ -482,11 +426,9 @@ var loader = (function(exports) { get() { return getter(this[THIS]); }, - set(value) { setter(this[THIS], value); }, - enumerable: true }); } @@ -524,18 +466,12 @@ var loader = (function(exports) { } } } - return extendedExports; } - - var _default = { + _exports.default = { instantiate, instantiateSync, instantiateStreaming, demangle }; - exports.default = _default; - return exports; -})({}); -if (typeof define === 'function' && define.amd) define([], function() { return loader; }); -else if (typeof module === 'object' && typeof exports==='object') module.exports = loader; +}); diff --git a/lib/rtrace/README.md b/lib/rtrace/README.md index 622f41a1fd..21cb5cc645 100644 --- a/lib/rtrace/README.md +++ b/lib/rtrace/README.md @@ -1,6 +1,6 @@ -# AssemblyScript Rtrace +# ToilScript Rtrace -A tiny utility to sanitize the AssemblyScript runtime. Records allocations and frees performed by the runtime and emits an error if something is off. Also checks for leaks. +A tiny utility to sanitize the ToilScript runtime. Records allocations and frees performed by the runtime and emits an error if something is off. Also checks for leaks. Instructions ------------ diff --git a/lib/rtrace/package.json b/lib/rtrace/package.json index 2416a9b04f..a867b54acb 100644 --- a/lib/rtrace/package.json +++ b/lib/rtrace/package.json @@ -1,8 +1,8 @@ { "name": "@assemblyscript/rtrace", - "description": "A tiny utility to sanitize the AssemblyScript runtime.", + "description": "A tiny utility to sanitize the ToilScript runtime.", "keywords": [ - "assemblyscript", + "toilscript", "rtrace", "webassembly", "wasm" @@ -13,7 +13,7 @@ "homepage": "https://assemblyscript.org", "repository": { "type": "git", - "url": "https://github.com/AssemblyScript/assemblyscript.git", + "url": "https://github.com/ToilScript/assemblyscript.git", "directory": "lib/rtrace" }, "bugs": { @@ -34,8 +34,8 @@ "test": "node tests" }, "dependencies": { - "d3": "^6.3.1", - "jsdom": "^16.4.0" + "d3": "^7.9.0", + "jsdom": "^28.1.0" }, "files": [ "index.d.ts", diff --git a/lib/rtrace/umd/index.js b/lib/rtrace/umd/index.js index f4fdb0ad10..458d131021 100644 --- a/lib/rtrace/umd/index.js +++ b/lib/rtrace/umd/index.js @@ -1,61 +1,64 @@ // GENERATED FILE. DO NOT EDIT. -var rtrace = (function(exports) { +(function (global, factory) { + function preferDefault(exports) { + return exports.default || exports; + } + if (typeof define === "function" && define.amd) { + define([], function () { + var exports = {}; + factory(exports); + return preferDefault(exports); + }); + } else if (typeof exports === "object") { + factory(exports); + if (typeof module === "object") module.exports = preferDefault(exports); + } else { + (function () { + var exports = {}; + factory(exports); + global.rtrace = preferDefault(exports); + })(); + } +})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) { "use strict"; - - Object.defineProperty(exports, "__esModule", { + + Object.defineProperty(_exports, "__esModule", { value: true }); - exports.default = exports.Rtrace = exports.TOTAL_OVERHEAD = exports.OBJECT_OVERHEAD = exports.BLOCK_OVERHEAD = void 0; + _exports.default = _exports.TOTAL_OVERHEAD = _exports.Rtrace = _exports.OBJECT_OVERHEAD = _exports.BLOCK_OVERHEAD = void 0; // WebAssembly pages are 65536 kb const PAGE_SIZE_BITS = 16; const PAGE_SIZE = 1 << PAGE_SIZE_BITS; - const PAGE_MASK = PAGE_SIZE - 1; // Wasm32 pointer size is 4 bytes - + const PAGE_MASK = PAGE_SIZE - 1; + + // Wasm32 pointer size is 4 bytes const PTR_SIZE_BITS = 2; const PTR_SIZE = 1 << PTR_SIZE_BITS; const PTR_MASK = PTR_SIZE - 1; const PTR_VIEW = Uint32Array; - const BLOCK_OVERHEAD = PTR_SIZE; - exports.BLOCK_OVERHEAD = BLOCK_OVERHEAD; - const OBJECT_OVERHEAD = 16; - exports.OBJECT_OVERHEAD = OBJECT_OVERHEAD; - const TOTAL_OVERHEAD = BLOCK_OVERHEAD + OBJECT_OVERHEAD; - exports.TOTAL_OVERHEAD = TOTAL_OVERHEAD; - + const BLOCK_OVERHEAD = _exports.BLOCK_OVERHEAD = PTR_SIZE; + const OBJECT_OVERHEAD = _exports.OBJECT_OVERHEAD = 16; + _exports.TOTAL_OVERHEAD = BLOCK_OVERHEAD + OBJECT_OVERHEAD; function assert(x) { if (!x) throw Error("assertion failed"); return x; } - Error.stackTraceLimit = 15; - function trimStacktrace(stack, levels) { return stack.split(/\r?\n/).slice(1 + levels); } - const hrtime = typeof performance !== "undefined" && performance.now ? performance.now : typeof process !== "undefined" && process.hrtime ? () => { let t = process.hrtime(); return t[0] * 1e3 + t[1] / 1e6; } : Date.now; const mmTagsToString = ["", "FREE", "LEFTFREE", "FREE+LEFTFREE"]; const gcColorToString = ["BLACK/WHITE", "WHITE/BLACK", "GRAY", "INVALID"]; - class Rtrace { constructor(options) { this.options = options || {}; - - this.onerror = this.options.onerror || function () { - /* nop */ - }; - - this.oninfo = this.options.oninfo || function () { - /* nop */ - }; - - this.oncollect_ = this.options.oncollect || function () { - /* nop */ - }; - + this.onerror = this.options.onerror || function () {/* nop */}; + this.oninfo = this.options.oninfo || function () {/* nop */}; + this.oncollect_ = this.options.oncollect || function () {/* nop */}; this.memory = null; this.shadow = null; this.shadowStart = 0x100000000; @@ -70,7 +73,6 @@ var rtrace = (function(exports) { this.freeCount = 0; this.heapBase = 0x100000000; } - install(imports) { if (!imports) imports = {}; imports.rtrace = Object.assign(imports.rtrace || {}, { @@ -88,9 +90,8 @@ var rtrace = (function(exports) { }); return imports; } + /** Synchronizes the shadow memory with the module's memory. */ - - syncShadow() { if (!this.memory) { this.memory = assert(this.options.getMemory()); @@ -98,85 +99,71 @@ var rtrace = (function(exports) { initial: (this.memory.buffer.byteLength + PAGE_MASK & ~PAGE_MASK) >>> PAGE_SIZE_BITS }); } else { - var diff = this.memory.buffer.byteLength - this.shadow.buffer.byteLength; + let diff = this.memory.buffer.byteLength - this.shadow.buffer.byteLength; if (diff > 0) this.shadow.grow(diff >>> 16); } } + /** Marks a block's presence in shadow memory. */ - - markShadow(info, oldSize = 0) { assert(this.shadow && this.shadow.byteLength == this.memory.byteLength); assert((info.size & PTR_MASK) == 0); - if (info.ptr < this.shadowStart) { this.shadowStart = info.ptr; } - - var len = info.size >>> PTR_SIZE_BITS; - var view = new PTR_VIEW(this.shadow.buffer, info.ptr, len); - var errored = false; - var start = oldSize >>> PTR_SIZE_BITS; - + let len = info.size >>> PTR_SIZE_BITS; + let view = new PTR_VIEW(this.shadow.buffer, info.ptr, len); + let errored = false; + let start = oldSize >>> PTR_SIZE_BITS; for (let i = 0; i < start; ++i) { if (view[i] != info.ptr && !errored) { this.onerror(Error("shadow region mismatch: " + view[i] + " != " + info.ptr), info); errored = true; } } - errored = false; - for (let i = start; i < len; ++i) { if (view[i] != 0 && !errored) { this.onerror(Error("shadow region already in use: " + view[i] + " != 0"), info); errored = true; } - view[i] = info.ptr; } } + /** Unmarks a block's presence in shadow memory. */ - - unmarkShadow(info, oldSize = info.size) { assert(this.shadow && this.shadow.byteLength == this.memory.byteLength); - var len = oldSize >>> PTR_SIZE_BITS; - var view = new PTR_VIEW(this.shadow.buffer, info.ptr, len); - var errored = false; - var start = 0; - + let len = oldSize >>> PTR_SIZE_BITS; + let view = new PTR_VIEW(this.shadow.buffer, info.ptr, len); + let errored = false; + let start = 0; if (oldSize != info.size) { assert(oldSize > info.size); start = info.size >>> PTR_SIZE_BITS; } - for (let i = 0; i < len; ++i) { if (view[i] != info.ptr && !errored) { this.onerror(Error("shadow region mismatch: " + view[i] + " != " + info.ptr), info); errored = true; } - if (i >= start) view[i] = 0; } } + /** Performs an access to shadow memory. */ - - accessShadow(ptr, size, isLoad, isRT) { this.syncShadow(); if (ptr < this.shadowStart) return; - var value = new Uint32Array(this.shadow.buffer, ptr & ~PTR_MASK, 1)[0]; + let value = new Uint32Array(this.shadow.buffer, ptr & ~PTR_MASK, 1)[0]; if (value != 0) return; - if (!isRT) { let stack = trimStacktrace(new Error().stack, 2); this.onerror(new Error("OOB " + (isLoad ? "load" : "store") + 8 * size + " at address " + ptr + "\n" + stack.join("\n"))); } } + /** Obtains information about a block. */ - - getBlockInfo(ptr) { const [mmInfo, gcInfo, gcInfo2, rtId, rtSize] = new Uint32Array(this.memory.buffer, ptr, 5); const size = mmInfo & ~3; @@ -187,7 +174,6 @@ var rtrace = (function(exports) { mmInfo: { tags: mmTagsToString[mmInfo & 3], size: size // as stored excl. overhead - }, gcInfo: { color: gcColorToString[gcInfo & 3], @@ -198,71 +184,61 @@ var rtrace = (function(exports) { rtSize }; } + /** Checks if rtrace is active, i.e. at least one event has occurred. */ - - get active() { return Boolean(this.allocCount || this.resizeCount || this.moveCount || this.freeCount); } + /** Checks if there are any leaks and emits them via `oninfo`. Returns the number of live blocks. */ - - check() { if (this.oninfo) { for (let [ptr, info] of this.blocks) { this.oninfo("LIVE " + ptr + "\n" + info.allocStack.join("\n")); } } - return this.blocks.size; - } // Runtime instrumentation - - + } + + // Runtime instrumentation + oninit(heapBase) { this.heapBase = heapBase; this.gcProfileStart = 0; this.gcProfile.length = 0; this.oninfo("INIT heapBase=" + heapBase); } - onalloc(ptr) { this.syncShadow(); ++this.allocCount; - var info = this.getBlockInfo(ptr); - + let info = this.getBlockInfo(ptr); if (this.blocks.has(ptr)) { this.onerror(Error("duplicate alloc: " + ptr), info); } else { this.oninfo("ALLOC " + ptr + ".." + (ptr + info.size)); this.markShadow(info); let allocStack = trimStacktrace(new Error().stack, 1); // strip onalloc - this.blocks.set(ptr, Object.assign(info, { allocStack })); } } - onresize(ptr, oldSize) { this.syncShadow(); ++this.resizeCount; const info = this.getBlockInfo(ptr); - if (!this.blocks.has(ptr)) { this.onerror(Error("orphaned resize: " + ptr), info); } else { const beforeInfo = this.blocks.get(ptr); - if (beforeInfo.size != oldSize) { this.onerror(Error(`size mismatch upon resize: ${ptr} (${beforeInfo.size} != ${oldSize})`), info); } - const newSize = info.size; this.oninfo("RESIZE " + ptr + ".." + (ptr + newSize) + " (" + oldSize + "->" + newSize + ")"); this.blocks.set(ptr, Object.assign(info, { allocStack: beforeInfo.allocStack })); - if (newSize > oldSize) { this.markShadow(info, oldSize); } else if (newSize < oldSize) { @@ -270,13 +246,11 @@ var rtrace = (function(exports) { } } } - onmove(oldPtr, newPtr) { this.syncShadow(); ++this.moveCount; - var oldInfo = this.getBlockInfo(oldPtr); - var newInfo = this.getBlockInfo(newPtr); - + let oldInfo = this.getBlockInfo(oldPtr); + let newInfo = this.getBlockInfo(newPtr); if (!this.blocks.has(oldPtr)) { this.onerror(Error("orphaned move (old): " + oldPtr), oldInfo); } else { @@ -286,48 +260,39 @@ var rtrace = (function(exports) { const beforeInfo = this.blocks.get(oldPtr); const oldSize = oldInfo.size; const newSize = newInfo.size; - if (beforeInfo.size != oldSize) { this.onerror(Error(`size mismatch upon move: ${oldPtr} (${beforeInfo.size} != ${oldSize})`), oldInfo); } - - this.oninfo("MOVE " + oldPtr + ".." + (oldPtr + oldSize) + " -> " + newPtr + ".." + (newPtr + newSize)); // calls new alloc before and old free after + this.oninfo("MOVE " + oldPtr + ".." + (oldPtr + oldSize) + " -> " + newPtr + ".." + (newPtr + newSize)); + // calls new alloc before and old free after } } } - onvisit(ptr) { // Indicates that a block has been freed but it still visited by the GC if (ptr > this.heapBase && !this.blocks.has(ptr)) { let err = Error("orphaned visit: " + ptr); let info = this.freedBlocks.get(ptr); - if (info) { err.stack += "\n^ allocated at:\n" + info.allocStack.join("\n"); err.stack += "\n^ freed at:\n" + info.freeStack.join("\n"); } - this.onerror(err, null); return false; } - return true; } - onfree(ptr) { this.syncShadow(); ++this.freeCount; - var info = this.getBlockInfo(ptr); - + let info = this.getBlockInfo(ptr); if (!this.blocks.has(ptr)) { this.onerror(Error("orphaned free: " + ptr), info); } else { const oldInfo = this.blocks.get(ptr); - if (info.size != oldInfo.size) { this.onerror(Error(`size mismatch upon free: ${ptr} (${oldInfo.size} != ${info.size})`), info); } - this.oninfo("FREE " + ptr + ".." + (ptr + info.size)); this.unmarkShadow(info); const allocInfo = this.blocks.get(ptr); @@ -335,56 +300,47 @@ var rtrace = (function(exports) { const allocStack = allocInfo.allocStack; const freeStack = trimStacktrace(new Error().stack, 1); // strip onfree // (not much) TODO: Maintaining these is essentially a memory leak - this.freedBlocks.set(ptr, { allocStack, freeStack }); } } - oncollect(total) { this.oninfo(`COLLECT at ${total}`); this.plot(total); this.oncollect_(); - } // GC profiling - - + } + + // GC profiling + plot(total, pause = 0) { if (!this.gcProfileStart) this.gcProfileStart = Date.now(); this.gcProfile.push([Date.now() - this.gcProfileStart, total, pause]); } - oninterrupt(total) { this.interruptStart = hrtime(); this.plot(total); } - onyield(total) { - var pause = hrtime() - this.interruptStart; + let pause = hrtime() - this.interruptStart; if (pause >= 1) console.log("interrupted for " + pause.toFixed(1) + "ms"); this.plot(total, pause); - } // Memory instrumentation - - + } + + // Memory instrumentation + onstore(ptr, offset, bytes, isRT) { this.accessShadow(ptr + offset, bytes, false, isRT); return ptr; } - onload(ptr, offset, bytes, isRT) { this.accessShadow(ptr + offset, bytes, true, isRT); return ptr; } - } - - exports.Rtrace = Rtrace; - var _default = { + _exports.Rtrace = Rtrace; + _exports.default = { Rtrace }; - exports.default = _default; - return exports; -})({}); -if (typeof define === 'function' && define.amd) define([], function() { return rtrace; }); -else if (typeof module === 'object' && typeof exports==='object') module.exports = rtrace; +}); \ No newline at end of file diff --git a/media/architecture.svg b/media/architecture.svg index dba04e2bd6..b23dbc2a0e 100644 --- a/media/architecture.svg +++ b/media/architecture.svg @@ -1,2 +1,2 @@ -
AssemblyScript
AssemblyScript
Tokenizer
Tokenizer
TypeScript    
[Not supported by viewer]
Parser
Parser
Program
Program
Compiler
Compiler
Compiler frontend
(asc)
Compiler frontend<br>(asc)
Tokens
Tokens
AST
AST
Module
Module
IR
IR
WebAssembly
Binary
WebAssembly<br>Binary
WebAssembly
Text
WebAssembly<br>Text
asm.js
asm.js
WebIDL
WebIDL
DTS
DTS
Binaryen
Binaryen
builtins 
builtins 
lib 
[Not supported by viewer]
types 
types 
Glue
Glue
\ No newline at end of file +
ToilScript
ToilScript
Tokenizer
Tokenizer
TypeScript    
[Not supported by viewer]
Parser
Parser
Program
Program
Compiler
Compiler
Compiler frontend
(asc)
Compiler frontend<br>(asc)
Tokens
Tokens
AST
AST
Module
Module
IR
IR
WebAssembly
Binary
WebAssembly<br>Binary
WebAssembly
Text
WebAssembly<br>Text
asm.js
asm.js
WebIDL
WebIDL
DTS
DTS
Binaryen
Binaryen
builtins 
builtins 
lib 
[Not supported by viewer]
types 
types 
Glue
Glue
diff --git a/media/icon.png b/media/icon.png deleted file mode 100644 index 2ffe8dda6a..0000000000 Binary files a/media/icon.png and /dev/null differ diff --git a/media/icon.svg b/media/icon.svg index 8277743b58..835db9994a 100644 --- a/media/icon.svg +++ b/media/icon.svg @@ -1,4 +1,268 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index b3b4565299..b8aa57c838 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { - "name": "assemblyscript", - "version": "0.0.0", + "name": "toilscript", + "version": "0.1.38", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "assemblyscript", - "version": "0.0.0", + "name": "toilscript", + "version": "0.1.38", "license": "Apache-2.0", "dependencies": { "binaryen": "130.0.0-nightly.20260609", "long": "^5.2.4" }, "bin": { - "asc": "bin/asc.js", - "asinit": "bin/asinit.js" + "toilinit": "bin/toilinit.js", + "toilscript": "bin/toilscript.js" }, "devDependencies": { "@eslint/js": "^10.0.1", @@ -38,9 +38,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", "cpu": [ "ppc64" ], @@ -55,9 +55,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], @@ -72,9 +72,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], @@ -89,9 +89,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], @@ -106,9 +106,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -123,9 +123,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", "cpu": [ "x64" ], @@ -140,9 +140,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", "cpu": [ "arm64" ], @@ -157,9 +157,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", "cpu": [ "x64" ], @@ -174,9 +174,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", "cpu": [ "arm" ], @@ -191,9 +191,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", "cpu": [ "arm64" ], @@ -208,9 +208,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", "cpu": [ "ia32" ], @@ -225,9 +225,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", "cpu": [ "loong64" ], @@ -242,9 +242,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", "cpu": [ "mips64el" ], @@ -259,9 +259,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", "cpu": [ "ppc64" ], @@ -276,9 +276,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", "cpu": [ "riscv64" ], @@ -293,9 +293,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", "cpu": [ "s390x" ], @@ -310,9 +310,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", "cpu": [ "x64" ], @@ -327,9 +327,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", "cpu": [ "arm64" ], @@ -344,9 +344,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", "cpu": [ "x64" ], @@ -361,9 +361,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", "cpu": [ "arm64" ], @@ -378,9 +378,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", "cpu": [ "x64" ], @@ -395,9 +395,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", "cpu": [ "arm64" ], @@ -412,9 +412,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", "cpu": [ "x64" ], @@ -429,9 +429,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", "cpu": [ "arm64" ], @@ -446,9 +446,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", "cpu": [ "ia32" ], @@ -463,9 +463,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", "cpu": [ "x64" ], @@ -498,6 +498,19 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", @@ -524,9 +537,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", - "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -581,9 +594,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", - "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -595,29 +608,43 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -654,9 +681,9 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -668,27 +695,27 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", - "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "version": "25.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", + "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.19.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", - "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.0.tgz", + "integrity": "sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.0", - "@typescript-eslint/type-utils": "8.59.0", - "@typescript-eslint/utils": "8.59.0", - "@typescript-eslint/visitor-keys": "8.59.0", + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/type-utils": "8.60.0", + "@typescript-eslint/utils": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -701,7 +728,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.59.0", + "@typescript-eslint/parser": "^8.60.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -717,16 +744,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", - "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.0.tgz", + "integrity": "sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.0", - "@typescript-eslint/types": "8.59.0", - "@typescript-eslint/typescript-estree": "8.59.0", - "@typescript-eslint/visitor-keys": "8.59.0", + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3" }, "engines": { @@ -742,14 +769,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", - "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.0.tgz", + "integrity": "sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.0", - "@typescript-eslint/types": "^8.59.0", + "@typescript-eslint/tsconfig-utils": "^8.60.0", + "@typescript-eslint/types": "^8.60.0", "debug": "^4.4.3" }, "engines": { @@ -764,14 +791,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", - "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.0.tgz", + "integrity": "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.0", - "@typescript-eslint/visitor-keys": "8.59.0" + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -782,9 +809,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", - "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.0.tgz", + "integrity": "sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ==", "dev": true, "license": "MIT", "engines": { @@ -799,15 +826,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", - "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.0.tgz", + "integrity": "sha512-SX46wEUtitCpq7AN38HkUU/+zvUpdKf7ephtWAFgckH8O7PQIyL5gvrhQgBLuEYgLfuKWOVvWVskMbuFHAz5xg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.0", - "@typescript-eslint/typescript-estree": "8.59.0", - "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/utils": "8.60.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -824,9 +851,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", - "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.0.tgz", + "integrity": "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA==", "dev": true, "license": "MIT", "engines": { @@ -838,16 +865,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", - "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.0.tgz", + "integrity": "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.59.0", - "@typescript-eslint/tsconfig-utils": "8.59.0", - "@typescript-eslint/types": "8.59.0", - "@typescript-eslint/visitor-keys": "8.59.0", + "@typescript-eslint/project-service": "8.60.0", + "@typescript-eslint/tsconfig-utils": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -866,16 +893,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", - "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.0.tgz", + "integrity": "sha512-HtXuPfrHTyBDkameWpl+vJb1Uevu2tznAyahM1Oc4AENidCLTPiZDWIo4GfcxNdC/RcfGcadzzkqbRG87dUrQA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.0", - "@typescript-eslint/types": "8.59.0", - "@typescript-eslint/typescript-estree": "8.59.0" + "@typescript-eslint/scope-manager": "8.60.0", + "@typescript-eslint/types": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -890,13 +917,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", - "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.0.tgz", + "integrity": "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -907,19 +934,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -944,9 +958,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -1058,9 +1072,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1071,32 +1085,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escape-string-regexp": { @@ -1113,18 +1127,18 @@ } }, "node_modules/eslint": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.1.tgz", - "integrity": "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", + "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", - "@eslint/config-helpers": "^0.5.5", + "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", - "@eslint/plugin-kit": "^0.7.1", + "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -1188,19 +1202,6 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", @@ -1231,19 +1232,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -1412,9 +1400,9 @@ } }, "node_modules/globals": { - "version": "17.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.5.0.tgz", - "integrity": "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", "engines": { @@ -1542,9 +1530,9 @@ "license": "Apache-2.0" }, "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -1552,13 +1540,13 @@ } }, "node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^5.0.2" + "brace-expansion": "^5.0.5" }, "engines": { "node": "18 || 20 || >=22" @@ -1712,9 +1700,9 @@ } }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { @@ -1805,16 +1793,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.59.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz", - "integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==", + "version": "8.60.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.0.tgz", + "integrity": "sha512-9f65qWLZdAW9m1JaxBDUHcqRUfL8bkxxXL7XxEfI+F09q56PkBvIfCjLF3yInsDM/BBmwkqmCQdCZe/RYlIWEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.59.0", - "@typescript-eslint/parser": "8.59.0", - "@typescript-eslint/typescript-estree": "8.59.0", - "@typescript-eslint/utils": "8.59.0" + "@typescript-eslint/eslint-plugin": "8.60.0", + "@typescript-eslint/parser": "8.60.0", + "@typescript-eslint/typescript-estree": "8.60.0", + "@typescript-eslint/utils": "8.60.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1829,9 +1817,9 @@ } }, "node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index a13ad55699..07748b86c3 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,23 @@ { - "name": "assemblyscript", + "name": "toilscript", "description": "A TypeScript-like language for WebAssembly.", "keywords": [ "typescript", "webassembly", "compiler", - "assemblyscript", + "toilscript", "wasm" ], - "version": "0.0.0", + "version": "0.1.38", "author": "Daniel Wirtz ", "license": "Apache-2.0", - "homepage": "https://assemblyscript.org", + "homepage": "https://github.com/dacely-cloud/toilscript", "repository": { "type": "git", - "url": "https://github.com/AssemblyScript/assemblyscript.git" + "url": "https://github.com/dacely-cloud/toilscript.git" }, "bugs": { - "url": "https://github.com/AssemblyScript/assemblyscript/issues" + "url": "https://github.com/dacely-cloud/toilscript/issues" }, "engines": { "node": ">=20", @@ -43,12 +43,12 @@ "type": "module", "exports": { ".": { - "import": "./dist/assemblyscript.js", - "types": "./dist/assemblyscript.d.ts" + "import": "./dist/toilscript.js", + "types": "./dist/toilscript.d.ts" }, - "./asc": { - "import": "./dist/asc.js", - "types": "./dist/asc.d.ts" + "./cli": { + "import": "./dist/cli.js", + "types": "./dist/cli.d.ts" }, "./transform": { "import": "./dist/transform.js", @@ -68,8 +68,8 @@ } }, "bin": { - "asc": "./bin/asc.js", - "asinit": "./bin/asinit.js" + "toilscript": "./bin/toilscript.js", + "toilinit": "./bin/toilinit.js" }, "scripts": { "check": "npm run check:config && npm run check:import && npm run lint", @@ -77,25 +77,32 @@ "check:import": "tsc --noEmit --skipLibCheck --target ESNEXT --module nodenext --moduleResolution nodenext --experimentalDecorators tests/import/index", "lint": "eslint --max-warnings 0 --ext js . && eslint --max-warnings 0 --ext ts .", "build": "node scripts/build", + "prepublishOnly": "node scripts/build", "watch": "node scripts/build --watch", "coverage": "npx c8 -- npm test", - "test": "npm run test:parser && npm run test:compiler -- --parallel && npm run test:browser && npm run test:asconfig && npm run test:transform && npm run test:cli", + "test": "npm run test:parser && npm run test:compiler -- --parallel && npm run test:browser && npm run test:toilconfig && npm run test:transform && npm run test:cli && npm run test:json && npm run test:data && npm run test:dbresolve && npm run test:dbstatic && npm run test:routekinds && npm run test:streams", "test:parser": "node --enable-source-maps tests/parser", "test:compiler": "node --enable-source-maps --no-warnings tests/compiler", "test:browser": "node --enable-source-maps tests/browser", - "test:asconfig": "cd tests/asconfig && npm run test", + "test:toilconfig": "cd tests/toilconfig && npm run test", "test:transform": "npm run test:transform:esm && npm run test:transform:cjs", - "test:transform:esm": "node bin/asc tests/compiler/empty --transform ./tests/transform/index.js --noEmit && node bin/asc tests/compiler/empty --transform ./tests/transform/simple.js --noEmit", - "test:transform:cjs": "node bin/asc tests/compiler/empty --transform ./tests/transform/cjs/index.js --noEmit && node bin/asc tests/compiler/empty --transform ./tests/transform/cjs/simple.js --noEmit", + "test:transform:esm": "node bin/toilscript tests/compiler/empty --transform ./tests/transform/index.js --noEmit && node bin/toilscript tests/compiler/empty --transform ./tests/transform/simple.js --noEmit", + "test:transform:cjs": "node bin/toilscript tests/compiler/empty --transform ./tests/transform/cjs/index.js --noEmit && node bin/toilscript tests/compiler/empty --transform ./tests/transform/cjs/simple.js --noEmit", "test:cli": "node tests/cli/options.js", + "test:json": "node tests/json/run.mjs", + "test:data": "node tests/data/run.mjs", + "test:dbresolve": "node tests/dbresolve/run.mjs", + "test:dbstatic": "node tests/dbstatic/run.mjs", + "test:routekinds": "node tests/routekinds/run.mjs", + "test:streams": "node tests/streams/run.mjs && node tests/streams/catalog.mjs && node tests/streams/codegen.mjs", "asbuild": "npm run asbuild:debug && npm run asbuild:release", - "asbuild:debug": "node bin/asc --config src/asconfig.json --target debug", - "asbuild:release": "node bin/asc --config src/asconfig.json --target release", - "asbuild:rtraced": "node bin/asc --config src/asconfig.json --target rtraced", + "asbuild:debug": "node bin/toilscript --config src/toilconfig.json --target debug", + "asbuild:release": "node bin/toilscript --config src/toilconfig.json --target release", + "asbuild:rtraced": "node bin/toilscript --config src/toilconfig.json --target rtraced", "bootstrap": "npm run bootstrap:debug && npm run bootstrap:release", - "bootstrap:debug": "node bin/asc --config src/asconfig.json --target debug && node bin/asc --config src/asconfig.json --target debug-bootstrap --wasm ./build/assemblyscript.debug.js && node bin/asc --config src/asconfig.json --target debug-bootstrap --wasm ./build/assemblyscript.debug-bootstrap.js && git --no-pager diff --no-index build/assemblyscript.debug.wast build/assemblyscript.debug-bootstrap.wast", - "bootstrap:release": "node bin/asc --config src/asconfig.json --target release && node bin/asc --config src/asconfig.json --target release-bootstrap --wasm ./build/assemblyscript.release.js && node bin/asc --config src/asconfig.json --target release-bootstrap --wasm ./build/assemblyscript.release-bootstrap.js && git --no-pager diff --no-index build/assemblyscript.release.wast build/assemblyscript.release-bootstrap.wast", - "bootstrap:rtraced": "node bin/asc --config src/asconfig.json --target rtraced && node bin/asc --config src/asconfig.json --target rtraced --wasm ./build/assemblyscript.rtraced.js" + "bootstrap:debug": "node bin/toilscript --config src/toilconfig.json --target debug && node bin/toilscript --config src/toilconfig.json --target debug-bootstrap --wasm ./build/toilscript.debug.js && node bin/toilscript --config src/toilconfig.json --target debug-bootstrap --wasm ./build/toilscript.debug-bootstrap.js && git --no-pager diff --no-index build/toilscript.debug.wast build/toilscript.debug-bootstrap.wast", + "bootstrap:release": "node bin/toilscript --config src/toilconfig.json --target release && node bin/toilscript --config src/toilconfig.json --target release-bootstrap --wasm ./build/toilscript.release.js && node bin/toilscript --config src/toilconfig.json --target release-bootstrap --wasm ./build/toilscript.release-bootstrap.js && git --no-pager diff --no-index build/toilscript.release.wast build/toilscript.release-bootstrap.wast", + "bootstrap:rtraced": "node bin/toilscript --config src/toilconfig.json --target rtraced && node bin/toilscript --config src/toilconfig.json --target rtraced --wasm ./build/toilscript.rtraced.js" }, "files": [ "bin/", diff --git a/scripts/build-dts.js b/scripts/build-dts.js index 979db546a9..b730305b27 100644 --- a/scripts/build-dts.js +++ b/scripts/build-dts.js @@ -315,7 +315,7 @@ function transformTypes(sourceFile) { return result; } -const prefix = "types:assemblyscript"; +const prefix = "types:toilscript"; export function generateSrc() { const stdout = []; @@ -353,10 +353,10 @@ export function generateSrc() { }); const source = stdout.join("").replace(/\/\/\/ ]*>\r?\n/g, ""); - const sourceFile = ts.createSourceFile("assemblyscript.d.ts", source, ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("toilscript.d.ts", source, ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); const result = transformTypes(sourceFile); fs.writeFileSync( - pathUtil.resolve(__dirname, "..", "dist", "assemblyscript.generated.d.ts"), + pathUtil.resolve(__dirname, "..", "dist", "toilscript.generated.d.ts"), ts.createPrinter().printFile(result.transformed[0]) ); } @@ -370,7 +370,7 @@ export function generateCli() { pathUtil.resolve(__dirname, "..", "cli", "index.d.ts") ], externs: [ - "./assemblyscript.generated.d.ts" + "./toilscript.generated.d.ts" ], prefix, stdout, @@ -386,10 +386,10 @@ export function generateCli() { }); const source = stdout.join(""); - const sourceFile = ts.createSourceFile("asc.d.ts", source, ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); + const sourceFile = ts.createSourceFile("cli.d.ts", source, ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); const result = transformTypes(sourceFile); fs.writeFileSync( - pathUtil.resolve(__dirname, "..", "dist", "asc.generated.d.ts"), + pathUtil.resolve(__dirname, "..", "dist", "cli.generated.d.ts"), ts.createPrinter().printFile(result.transformed[0]) ); } diff --git a/scripts/build-web.js b/scripts/build-web.js index 8ffb3765d9..f59e7248eb 100644 --- a/scripts/build-web.js +++ b/scripts/build-web.js @@ -11,13 +11,13 @@ export function buildWeb() { const binaryenVersion = pkg.packages["node_modules/binaryen"].version || pkg.dependencies.binaryen.version; const longVersion = pkg.packages["node_modules/long"].version || pkg.dependencies.long.version; - const distUrl = mainVersion === "0.0.0" ? `./` : `https://cdn.jsdelivr.net/npm/assemblyscript@${mainVersion}/dist/`; + const distUrl = mainVersion === "0.0.0" ? `./` : `https://cdn.jsdelivr.net/npm/toilscript@${mainVersion}/dist/`; const binaryenUrl = `https://cdn.jsdelivr.net/npm/binaryen@${binaryenVersion}/index.js`; const longUrl = `https://cdn.jsdelivr.net/npm/long@${longVersion}/index.js`; const importmap = { "imports": { - "assemblyscript": `${distUrl}assemblyscript.js`, - "assemblyscript/asc": `${distUrl}asc.js`, + "toilscript": `${distUrl}toilscript.js`, + "toilscript/cli": `${distUrl}cli.js`, "binaryen": binaryenUrl, "long": longUrl } @@ -40,4 +40,4 @@ export function buildWeb() { document.head.appendChild(elem); } `); -} \ No newline at end of file +} diff --git a/scripts/build.js b/scripts/build.js index e8496cff23..800dff6b9e 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -18,7 +18,7 @@ function prelude(name) { "/**\n", " * @license\n", " * ", name, "\n", - " * Copyright ", new Date().getFullYear().toString(), " Daniel Wirtz / The AssemblyScript Authors\n", + " * Copyright ", new Date().getFullYear().toString(), " Daniel Wirtz / The ToilScript Authors\n", " * SPDX-License-Identifier: Apache-2.0\n", " */" ].join(""); @@ -201,7 +201,7 @@ const common = { platform: "node", format: "esm", external: [ - "assemblyscript", + "toilscript", "binaryen", "long" ], @@ -225,8 +225,8 @@ async function invokeBuild(options) { const srcBuild = invokeBuild({ entryPoints: [ "./src/index.ts" ], tsconfig: "./src/tsconfig.json", - outfile: "./dist/assemblyscript.js", - banner: { js: prelude("The AssemblyScript compiler") }, + outfile: "./dist/toilscript.js", + banner: { js: prelude("The ToilScript compiler") }, plugins: [ diagnosticsPlugin, reportPlugin("src") ], ...common }); @@ -234,8 +234,8 @@ const srcBuild = invokeBuild({ const cliBuild = invokeBuild({ entryPoints: [ "./cli/index.js" ], tsconfig: "./cli/tsconfig.json", - outfile: "./dist/asc.js", - banner: { js: prelude("The AssemblyScript frontend") }, + outfile: "./dist/cli.js", + banner: { js: prelude("The ToilScript frontend") }, plugins: [ stdlibPlugin, webPlugin, reportPlugin("cli") ], ...common }); @@ -276,7 +276,7 @@ if (watch) { } console.log(`src : Compiler as a library -cli : Compiler frontend asc +cli : Compiler frontend (toilscript) dts : TS definition bundles web : Example web template\n`); diff --git a/src/README.md b/src/README.md index 55c85e0fc4..8fb844c618 100644 --- a/src/README.md +++ b/src/README.md @@ -1,18 +1,18 @@ Compiler ======== -Portable compiler sources that compile to both JavaScript using `tsc` and WebAssembly using `asc`. +Portable compiler sources that compile to both JavaScript using `tsc` and WebAssembly using `toilscript`. Architecture ------------ -![](https://raw.githubusercontent.com/AssemblyScript/assemblyscript/main/media/architecture.svg) +![](https://raw.githubusercontent.com/ToilScript/toilscript/main/media/architecture.svg) Usage ----- ```js -import assemblyscript from "assemblyscript"; +import toilscript from "toilscript"; ... ``` @@ -41,16 +41,16 @@ To build the compiler to a WebAssembly binary, run: npm run bootstrap ``` -Uses the AssemblyScript compiler compiled to JavaScript to compile itself to WebAssembly, building to WebAssembly again using itself compiled to WebAssembly. Builds to `build/`. Performs a `git diff` to make sure that both the initial and the final artifacts are the same. Note that this builds the compiler as a library, while the `asc` frontend setting it up and feeding it source files is JavaScript for now. +Uses the ToilScript compiler compiled to JavaScript to compile itself to WebAssembly, building to WebAssembly again using itself compiled to WebAssembly. Builds to `build/`. Performs a `git diff` to make sure that both the initial and the final artifacts are the same. Note that this builds the compiler as a library, while the `toilscript` frontend setting it up and feeding it source files is JavaScript for now. -Running `asc` with the WebAssembly variant: +Running `toilscript` with the WebAssembly variant: ```ts -asc [options...] --wasm build/assemblyscript.release-bootstrap.js +toilscript [options...] --wasm build/toilscript.release-bootstrap.js ``` Running the compiler tests with the WebAssembly variant: ```ts -npm run test:compiler -- --wasm build/assemblyscript.release-bootstrap.js +npm run test:compiler -- --wasm build/toilscript.release-bootstrap.js ``` diff --git a/src/ast.ts b/src/ast.ts index da649de549..1bbf31b77e 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -1033,7 +1033,47 @@ export enum DecoratorKind { ExternalJs, Builtin, Lazy, - Unsafe + Unsafe, + Main, + Data, + Remote, + Service, + Rest, + Route, + Get, + Post, + Put, + Delete, + Patch, + Head, + Options, + Cache, + Auth, + User, + Ratelimit, + // ToilDB (edge database). `@database` declares a logical database class whose + // `@collection`-decorated fields are typed collection handles; the function + // kinds gate which data operations are legal (spec 5/6). + Database, + Collection, + Query, + Action, + Job, + Derive, + // `@migrate` marks a free function `(old: OldShape): NewShape` whose body + // transforms a row written under a prior schema version into the current value + // type. The compiler weaves it into the value type's version-dispatching + // decoder (lazy, read-time migration); see SCHEMA_MIGRATION_PLAN Phase 3. + Migrate, + Admin, + // --- streams + daemon (spec 03) --- + Daemon, // @daemon class decorator (L4 entry; at most one per project) + Scheduled, // @scheduled(spec) method decorator inside a @daemon class + Stream, // @stream class decorator (L2/L3 stream protocol handler) + Connect, // @connect method in a @stream class (lifecycle hook) + Message, // @message method in a @stream class (lifecycle hook) + Close, // @close method in a @stream class (lifecycle hook) + Disconnect // @disconnect method in a @stream class (lifecycle hook) } export namespace DecoratorKind { @@ -1044,10 +1084,32 @@ export namespace DecoratorKind { let nameStr = (nameNode).text; assert(nameStr.length); switch (nameStr.charCodeAt(0)) { + case CharCode.a: { + if (nameStr == "auth") return DecoratorKind.Auth; + if (nameStr == "action") return DecoratorKind.Action; + if (nameStr == "admin") return DecoratorKind.Admin; + break; + } case CharCode.b: { if (nameStr == "builtin") return DecoratorKind.Builtin; break; } + case CharCode.c: { + if (nameStr == "cache") return DecoratorKind.Cache; + if (nameStr == "collection") return DecoratorKind.Collection; + if (nameStr == "connect") return DecoratorKind.Connect; + if (nameStr == "close") return DecoratorKind.Close; + break; + } + case CharCode.d: { + if (nameStr == "data") return DecoratorKind.Data; + if (nameStr == "del") return DecoratorKind.Delete; // `@del` (not `@delete`, a reserved word) + if (nameStr == "database") return DecoratorKind.Database; + if (nameStr == "derive") return DecoratorKind.Derive; + if (nameStr == "daemon") return DecoratorKind.Daemon; + if (nameStr == "disconnect") return DecoratorKind.Disconnect; + break; + } case CharCode.e: { if (nameStr == "external") return DecoratorKind.External; break; @@ -1058,23 +1120,63 @@ export namespace DecoratorKind { } case CharCode.g: { if (nameStr == "global") return DecoratorKind.Global; + if (nameStr == "get") return DecoratorKind.Get; + break; + } + case CharCode.h: { + if (nameStr == "head") return DecoratorKind.Head; break; } case CharCode.i: { if (nameStr == "inline") return DecoratorKind.Inline; break; } + case CharCode.j: { + if (nameStr == "job") return DecoratorKind.Job; + break; + } case CharCode.l: { if (nameStr == "lazy") return DecoratorKind.Lazy; break; } + case CharCode.m: { + if (nameStr == "main") return DecoratorKind.Main; + if (nameStr == "migrate") return DecoratorKind.Migrate; + if (nameStr == "message") return DecoratorKind.Message; + break; + } case CharCode.o: { if (nameStr == "operator") return DecoratorKind.Operator; + if (nameStr == "options") return DecoratorKind.Options; + break; + } + case CharCode.p: { + if (nameStr == "post") return DecoratorKind.Post; + if (nameStr == "put") return DecoratorKind.Put; + if (nameStr == "patch") return DecoratorKind.Patch; + break; + } + case CharCode.q: { + if (nameStr == "query") return DecoratorKind.Query; + break; + } + case CharCode.r: { + if (nameStr == "ratelimit") return DecoratorKind.Ratelimit; + if (nameStr == "remote") return DecoratorKind.Remote; + if (nameStr == "rest") return DecoratorKind.Rest; + if (nameStr == "route") return DecoratorKind.Route; + break; + } + case CharCode.s: { + if (nameStr == "service") return DecoratorKind.Service; + if (nameStr == "stream") return DecoratorKind.Stream; + if (nameStr == "scheduled") return DecoratorKind.Scheduled; break; } case CharCode.u: { if (nameStr == "unmanaged") return DecoratorKind.Unmanaged; if (nameStr == "unsafe") return DecoratorKind.Unsafe; + if (nameStr == "user") return DecoratorKind.User; break; } } diff --git a/src/builtins.ts b/src/builtins.ts index f876049603..79e0685a24 100644 --- a/src/builtins.ts +++ b/src/builtins.ts @@ -2334,7 +2334,10 @@ function builtin_heap_base_compile(ctx: BuiltinVariableContext): void { let element = ctx.element; let type = element.type; compiler.runtimeFeatures |= RuntimeFeatures.Heap; - module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + // Only add the dummy global if it doesn't already exist (may be called multiple times due to recompilation) + if (!module.getGlobal(element.internalName)) { + module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + } } builtinVariables_onCompile.set(BuiltinNames.heap_base, builtin_heap_base_compile); @@ -2357,7 +2360,10 @@ function builtin_data_end_compile(ctx: BuiltinVariableContext): void { let element = ctx.element; let type = element.type; compiler.runtimeFeatures |= RuntimeFeatures.Data; - module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + // Only add the dummy global if it doesn't already exist (may be called multiple times due to recompilation) + if (!module.getGlobal(element.internalName)) { + module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + } } builtinVariables_onCompile.set(BuiltinNames.data_end, builtin_data_end_compile); @@ -2380,7 +2386,10 @@ function builtin_stack_pointer_compile(ctx: BuiltinVariableContext): void { let element = ctx.element; let type = element.type; compiler.runtimeFeatures |= RuntimeFeatures.Stack; - module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + // Only add the dummy global if it doesn't already exist (may be called multiple times due to recompilation) + if (!module.getGlobal(element.internalName)) { + module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + } } builtinVariables_onCompile.set(BuiltinNames.stack_pointer, builtin_stack_pointer_compile); @@ -2403,7 +2412,10 @@ function builtin_rtti_base_compile(ctx: BuiltinVariableContext): void { let element = ctx.element; let type = element.type; compiler.runtimeFeatures |= RuntimeFeatures.Rtti; - module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + // Only add the dummy global if it doesn't already exist (may be called multiple times due to recompilation) + if (!module.getGlobal(element.internalName)) { + module.addGlobal(element.internalName, type.toRef(), true, compiler.makeZero(type)); // dummy + } } builtinVariables_onCompile.set(BuiltinNames.rtti_base, builtin_rtti_base_compile); diff --git a/src/common.ts b/src/common.ts index f5336f0479..8d4cd0f45a 100644 --- a/src/common.ts +++ b/src/common.ts @@ -192,6 +192,7 @@ export namespace CommonNames { export const ASC_FEATURE_EXTENDED_CONST = "ASC_FEATURE_EXTENDED_CONST"; export const ASC_FEATURE_STRINGREF = "ASC_FEATURE_STRINGREF"; export const ASC_FEATURE_SHARED_EVERYTHING = "ASC_FEATURE_SHARED_EVERYTHING"; + export const ASC_FEATURE_CLOSURES = "ASC_FEATURE_CLOSURES"; export const ASC_VERSION_MAJOR = "ASC_VERSION_MAJOR"; export const ASC_VERSION_MINOR = "ASC_VERSION_MINOR"; export const ASC_VERSION_PATCH = "ASC_VERSION_PATCH"; diff --git a/src/compiler.ts b/src/compiler.ts index f99bd5a049..1443ab6695 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -1,5 +1,5 @@ /** - * @fileoverview The AssemblyScript compiler. + * @fileoverview The ToilScript compiler. * @license Apache-2.0 */ @@ -19,6 +19,15 @@ import { compileRTTI } from "./builtins"; +import { + buildToilDbCatalog, + buildToilDbTypes, + buildToilDbRouteKinds, + buildToilSurface, + buildToilStreamCatalog, + buildToilDaemonCatalog +} from "./dbcatalog"; + import { Range, DiagnosticCode, @@ -61,6 +70,8 @@ import { getConstValueInteger } from "./module"; +import * as binaryen from "./glue/binaryen"; + import { CommonFlags, STATIC_DELIMITER, @@ -235,6 +246,9 @@ export class Options { /** WebAssembly target. Defaults to {@link Target.Wasm32}. */ target: Target = Target.Wasm32; + /** Toil compile surface mode. null = legacy single-artifact build (all surfaces allowed, + * matching pre-split behavior). "hot" = request + stream surface. "cold" = daemon surface. */ + targetMode: string | null = null; // "hot" | "cold" | null /** Runtime type. Defaults to Incremental GC. */ runtime: Runtime = Runtime.Incremental; /** If true, indicates that debug information will be emitted by Binaryen. */ @@ -460,6 +474,8 @@ export class Compiler extends DiagnosticEmitter { functionTable: Function[] = []; /** Arguments length helper global. */ builtinArgumentsLength: GlobalRef = 0; + /** Closure environment helper global. */ + closureEnvironmentGlobal: GlobalRef = 0; /** Requires runtime features. */ runtimeFeatures: RuntimeFeatures = RuntimeFeatures.None; /** Current inline functions stack. */ @@ -480,6 +496,8 @@ export class Compiler extends DiagnosticEmitter { hasCustomFunctionExports: bool = false; /** Whether the module would use the exported runtime to lift/lower. */ desiresExportRuntime: bool = false; + /** Whether the exception tag has been created. */ + exceptionTagEnsured: bool = false; /** Compiles a {@link Program} to a {@link Module} using the specified options. */ static compile(program: Program): Module { @@ -572,7 +590,7 @@ export class Compiler extends DiagnosticEmitter { } // compile and export runtime if requested or necessary - if (this.options.exportRuntime || (this.options.bindingsHint && this.desiresExportRuntime)) { + if ((this.options.exportRuntime || (this.options.bindingsHint && this.desiresExportRuntime)) && this.options.runtime != Runtime.Memory) { for (let i = 0, k = runtimeFunctions.length; i < k; ++i) { let name = runtimeFunctions[i]; let instance = program.requireFunction(name); @@ -656,11 +674,9 @@ export class Compiler extends DiagnosticEmitter { } } - // finalize runtime features + // finalize runtime features (RTTI only - visitGlobals/visitMembers are compiled after shadow stack pass) module.removeGlobal(BuiltinNames.rtti_base); if (this.runtimeFeatures & RuntimeFeatures.Rtti) compileRTTI(this); - if (this.runtimeFeatures & RuntimeFeatures.visitGlobals) compileVisitGlobals(this); - if (this.runtimeFeatures & RuntimeFeatures.visitMembers) compileVisitMembers(this); let memoryOffset = i64_align(this.memoryOffset, options.usizeType.byteSize); @@ -722,6 +738,22 @@ export class Compiler extends DiagnosticEmitter { module.addFunctionExport(BuiltinNames.setArgumentsLength, ExportNames.setArgumentsLength); } + // compile and export the `@main` entry point as the WASM export "main", if present + let mainPrototype = this.program.mainFunction; + if (mainPrototype) { + let mainInstance = this.resolver.resolveFunction(mainPrototype, null); + if (mainInstance && this.compileFunction(mainInstance)) { + if (module.hasExport("main")) { + this.error( + DiagnosticCode.Start_function_name_0_is_invalid_or_conflicts_with_another_export, + mainPrototype.declaration.range, "main" + ); + } else { + module.addFunctionExport(mainInstance.internalName, "main"); + } + } + } + // NOTE: no more element compiles from here. may go to the start function! // compile the start function if not empty or if explicitly requested @@ -762,14 +794,61 @@ export class Compiler extends DiagnosticEmitter { } } - // Run custom passes + // Run shadow stack pass first (may trigger compilation of functions that need visit functions) if (hasShadowStack) { this.shadowStack.walkModule(); } + + // Compile visit functions after shadow stack pass (which may have set runtimeFeatures flags) + if (this.runtimeFeatures & RuntimeFeatures.visitGlobals) compileVisitGlobals(this); + if (this.runtimeFeatures & RuntimeFeatures.visitMembers) compileVisitMembers(this); + + // Run shadow stack pass again with a fresh instance to transform any __tostack calls in visit functions + if (hasShadowStack && (this.runtimeFeatures & (RuntimeFeatures.visitGlobals | RuntimeFeatures.visitMembers))) { + new ShadowStackPass(this).walkModule(); + } + if (program.lookup("ASC_RTRACE") != null) { new RtraceMemory(this).walkModule(); } + // ToilDB: embed the collection catalog so the host can build the per-tenant + // catalog (correct family + schema) at module load. Absent if no `@database`. + let toildbCatalog = buildToilDbCatalog(program); + if (toildbCatalog != null) { + module.addCustomSection("toildb.catalog", toildbCatalog); + // The layout of every @data type, so the deploy gate can recurse into a + // nested @data field and catch a change a flat compare would miss. + let toildbTypes = buildToilDbTypes(program); + if (toildbTypes != null) { + module.addCustomSection("toildb.types", toildbTypes); + } + } + + // Streams + daemon surface sections (spec 03 sections 6/7/8, Part 5 order: + // toildb.catalog -> toildb.types -> toil.surface -> stream|daemon catalog). + // `toil.surface` is emitted in EVERY mode INCLUDING legacy (targetMode null, + // stamped as a hot artifact, Part 5 / doc 02 AN-2), so the host has the + // target mode + surface flags + the hot/cold coherence hash. + let targetMode = this.options.targetMode; + let surface = buildToilSurface(program, targetMode); + if (surface != null) module.addCustomSection("toil.surface", surface); + if (targetMode != "cold") { + // Request-path DB policy metadata. The edge uses this only to tighten + // mutating HTTP methods that the source declared read-only with `@query`. + let routeKinds = buildToilDbRouteKinds(program); + if (routeKinds != null) module.addCustomSection("toildb.route_kinds", routeKinds); + // hot or legacy: any @stream class -> toilstream.catalog. + let streamCat = buildToilStreamCatalog(program); + if (streamCat != null) module.addCustomSection("toilstream.catalog", streamCat); + } + if (targetMode == "cold") { + // cold: a @daemon class -> toildaemon.catalog (parses @scheduled specs, + // may fire diagnostics 9010/9011). + let daemonCat = buildToilDaemonCatalog(program); + if (daemonCat != null) module.addCustomSection("toildaemon.catalog", daemonCat); + } + return module; } @@ -1798,6 +1877,46 @@ export class Compiler extends DiagnosticEmitter { : null; let bodyStartIndex = stmts.length; + // Track locals before body compilation for potential recompilation + let numLocalsBeforeBody = instance.localsByIndex.length; + + // Track anonymous function counter for potential recompilation + let nextAnonymousIdBeforeBody = instance.nextAnonymousId; + + // For closures (functions that capture from outer scope), create a local to cache + // the environment pointer. This is needed because indirect calls to other closures + // can overwrite the global $~lib/__closure_env. + if (instance.outerFunction && !instance.closureEnvLocal) { + instance.closureEnvLocal = flow.addScopedLocal("$closureEnv", this.options.usizeType); + } + + // On recompilation, mark parameters that are known to be captured from previous pass + let capturedLocals = instance.capturedLocals; + if (capturedLocals && capturedLocals.size > 0) { + // Mark captured parameters and 'this' - they exist before body compilation + let hasOwnCapturedLocals = false; + for (let _keys = Map_keys(capturedLocals), i = 0, k = _keys.length; i < k; i++) { + let capturedLocal = _keys[i]; + // Only handle parameters/this (they belong to this function) + if (capturedLocal.parent == instance) { + let localInFlow = flow.lookupLocal(capturedLocal.name); + if (localInFlow && !localInFlow.isCaptured) { + localInFlow.isCaptured = true; + localInFlow.envSlotIndex = capturedLocal.envSlotIndex; + localInFlow.envOwner = capturedLocal.envOwner; + } + } + // Check if this instance owns any captured variables (needs envLocal) + if (capturedLocal.envOwner == instance) { + hasOwnCapturedLocals = true; + } + } + // Only create envLocal if this function owns some captured variables + if (hasOwnCapturedLocals && !instance.envLocal) { + instance.envLocal = flow.addScopedLocal("$env", this.options.usizeType); + } + } + // compile statements if (bodyNode.kind == NodeKind.Block) { stmts = this.compileStatements((bodyNode).statements, stmts); @@ -1825,6 +1944,126 @@ export class Compiler extends DiagnosticEmitter { } } + // Check if recompilation is needed due to late capture discovery + if (instance.needsCaptureRecompile) { + // Reset state for recompilation + instance.needsCaptureRecompile = false; + + // Reset stmts to before body compilation + stmts.length = bodyStartIndex; + + // Reset locals to before body compilation + let localsByIndex = instance.localsByIndex; + for (let i = numLocalsBeforeBody, k = localsByIndex.length; i < k; i++) { + localsByIndex[i].wasAccessedAsLocal = false; + } + localsByIndex.length = numLocalsBeforeBody; + + // Reset flow flags + flow.localFlags.length = numLocalsBeforeBody; + flow.unset( + FlowFlags.Returns | + FlowFlags.ReturnsWrapped | + FlowFlags.ReturnsNonNull | + FlowFlags.Terminates | + FlowFlags.Breaks | + FlowFlags.Continues | + FlowFlags.AccessesThis | + FlowFlags.ConditionallyAccessesThis | + FlowFlags.CallsSuper | + FlowFlags.MayReturnNonThis + ); + + // Clear scoped locals added during body compilation + // Keep only parameters and 'this' which exist before body compilation + let scopedLocals = flow.scopedLocals; + if (scopedLocals) { + let signature = instance.signature; + let numParams = signature.parameterTypes.length; + let hasThis = signature.thisType != null; + let keysToDelete = new Array(); + for (let _keys = Map_keys(scopedLocals), i = 0, k = _keys.length; i < k; i++) { + let name = _keys[i]; + let local = assert(scopedLocals.get(name)); + // Keep parameters and 'this', but remove body-scoped locals + let isParam = local.index >= (hasThis ? 1 : 0) && local.index < numParams + (hasThis ? 1 : 0); + let isThis = hasThis && local.index == 0; + let isEnvLocal = local == instance.envLocal || local == instance.closureEnvLocal; + if (!isParam && !isThis && !isEnvLocal) { + keysToDelete.push(name); + } + } + for (let i = 0, k = keysToDelete.length; i < k; i++) { + scopedLocals.delete(keysToDelete[i]); + } + } + + // Clear envLocal so it gets recreated with a valid index + // The old envLocal's index is invalid after localsByIndex truncation + if (instance.envLocal) { + let scopedLocals = flow.scopedLocals; + if (scopedLocals && scopedLocals.has("$env")) { + scopedLocals.delete("$env"); + } + instance.envLocal = null; + } + + // Also clear closureEnvLocal so it gets recreated with a valid index + if (instance.closureEnvLocal) { + let scopedLocals = flow.scopedLocals; + if (scopedLocals && scopedLocals.has("$closureEnv")) { + scopedLocals.delete("$closureEnv"); + } + instance.closureEnvLocal = null; + } + + // Clear wasAccessedAsLocal on parameters that will be marked captured + capturedLocals = instance.capturedLocals; + if (capturedLocals) { + for (let _keys = Map_keys(capturedLocals), i = 0, k = _keys.length; i < k; i++) { + _keys[i].wasAccessedAsLocal = false; + } + } + + // Reset anonymous ID counter so inner functions get the same IDs + instance.nextAnonymousId = nextAnonymousIdBeforeBody; + + // Recursively recompile - captures are now known + return this.compileFunctionBody(instance, stmts); + } + + // Allocate closure environment if this function has captured variables + // This is done after compiling the body because we discover captures during body compilation + capturedLocals = instance.capturedLocals; + if (instance.envLocal && capturedLocals && capturedLocals.size > 0) { + let envAlloc = this.compileClosureEnvironmentAllocation(instance); + // Insert at the beginning of the body + for (let i = stmts.length - 1; i >= bodyStartIndex; --i) { + stmts[i + 1] = stmts[i]; + } + stmts[bodyStartIndex] = envAlloc; + } + + // For closures (functions that capture from outer scope), emit code to cache the + // environment pointer in a local at function entry. This is needed because indirect + // calls to other closures can overwrite the global $~lib/__closure_env. + let closureEnvLocal = instance.closureEnvLocal; + if (closureEnvLocal) { + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + let sizeTypeRef = this.options.sizeTypeRef; + let cacheEnv = module.local_set( + closureEnvLocal.index, + module.global_get(closureEnvGlobal, sizeTypeRef), + false // not a reference type + ); + + // Insert at the beginning of the body + for (let i = stmts.length - 1; i >= bodyStartIndex; --i) { + stmts[i + 1] = stmts[i]; + } + stmts[bodyStartIndex] = cacheEnv; + } + // Make constructors return their instance pointer, and prepend a conditional // allocation if any code path accesses `this`. if (instance.is(CommonFlags.Constructor)) { @@ -1909,8 +2148,7 @@ export class Compiler extends DiagnosticEmitter { valueTypeRef, property.memoryOffset ); let flowBefore = this.currentFlow; - let flow = getterInstance.flow; - this.currentFlow = flow; + this.currentFlow = getterInstance.flow; if (property.is(CommonFlags.DefinitelyAssigned) && valueType.isReference && !valueType.isNullableReference) { body = this.makeRuntimeNonNullCheck(body, valueType, getterInstance.identifierNode); } @@ -1937,7 +2175,7 @@ export class Compiler extends DiagnosticEmitter { module.local_get(1, valueTypeRef), valueTypeRef, property.memoryOffset ); - if (valueType.isManaged) { + if (valueType.isManaged && this.options.runtime != Runtime.Memory) { let parent = setterInstance.parent; assert(parent.kind == ElementKind.Class); if ((parent).type.isManaged) { @@ -2873,6 +3111,28 @@ export class Compiler extends DiagnosticEmitter { // Remember that this flow returns flow.set(FlowFlags.Returns | FlowFlags.Terminates); + // Handle try-finally context: defer return until after finally + let tryFinallyContext = flow.getTryFinallyContext(); + if (tryFinallyContext) { + let pendingActionLocal = tryFinallyContext.tryFinallyPendingActionLocal; + let pendingValueLocal = tryFinallyContext.tryFinallyPendingValueLocal; + let dispatchLabel = assert(tryFinallyContext.tryFinallyDispatchLabel); + let stmts = new Array(); + + // Store return value if any + if (expr && returnType != Type.void) { + stmts.push(module.local_set(pendingValueLocal, expr, returnType.isManaged)); + } + + // Set pending action to RETURN (1) + stmts.push(module.local_set(pendingActionLocal, module.i32(1), false)); + + // Branch to finally dispatch + stmts.push(module.br(dispatchLabel)); + + return module.flatten(stmts); + } + // Handle inline return if (flow.isInline) { let inlineReturnLabel = assert(flow.inlineReturnLabel); @@ -3018,12 +3278,38 @@ export class Compiler extends DiagnosticEmitter { private compileThrowStatement( statement: ThrowStatement ): ExpressionRef { - // TODO: requires exception-handling spec. + let module = this.module; let flow = this.currentFlow; // Remember that this branch throws flow.set(FlowFlags.Throws | FlowFlags.Terminates); + // If exception handling feature is enabled, use actual throw instruction + if (this.options.hasFeature(Feature.ExceptionHandling)) { + // Compile the thrown value - should be Error or subclass + let valueExpr = this.compileExpression(statement.value, Type.auto); + let valueType = this.currentType; + + // Verify that the thrown type is Error or a subclass + let errorInstance = this.program.errorInstance; + let classReference = valueType.getClass(); + if (!classReference || !classReference.isAssignableTo(errorInstance)) { + this.error( + DiagnosticCode.Only_Error_or_its_subclasses_can_be_thrown_but_found_type_0, + statement.value.range, + valueType.toString() + ); + return module.unreachable(); + } + + // Ensure exception tag exists + let tagName = this.ensureExceptionTag(); + + // Emit throw instruction with the error pointer + return module.throw(tagName, [valueExpr]); + } + + // Fallback: convert throw to abort() call when exception handling is disabled let stmts = new Array(); let value = statement.value; let message: Expression | null = null; @@ -3034,20 +3320,309 @@ export class Compiler extends DiagnosticEmitter { stmts.push( this.makeAbort(message, statement) ); - return this.module.flatten(stmts); + return module.flatten(stmts); } private compileTryStatement( statement: TryStatement ): ExpressionRef { - // TODO: can't yet support something like: try { return ... } finally { ... } - // worthwhile to investigate lowering returns to block results (here)? - this.error( - DiagnosticCode.Not_implemented_0, - statement.range, - "Exceptions" - ); - return this.module.unreachable(); + let module = this.module; + let outerFlow = this.currentFlow; + + // Check feature flag + if (!this.options.hasFeature(Feature.ExceptionHandling)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + statement.range, + "exception-handling" + ); + return module.unreachable(); + } + + // Ensure exception tag exists + let tagName = this.ensureExceptionTag(); + + // Generate unique label for this try block + let label = outerFlow.pushControlFlowLabel(); + let tryLabel = `try|${label}`; + + // Compile try block body + let tryFlow = outerFlow.fork(); + this.currentFlow = tryFlow; + let tryStmts = new Array(); + this.compileStatements(statement.bodyStatements, tryStmts); + let tryBodyExpr = module.flatten(tryStmts); + let tryFlowTerminates = tryFlow.isAny(FlowFlags.Terminates); + + let catchTags: string[] = []; + let catchBodies: ExpressionRef[] = []; + let catchFlow: Flow | null = null; + let catchFlowTerminates = false; + + // Compile catch clause if present + let catchStatements = statement.catchStatements; + let catchVariable = statement.catchVariable; + if (catchStatements) { + catchFlow = outerFlow.fork(); + this.currentFlow = catchFlow; + + let catchStmts = new Array(); + + // The pop instruction MUST be the very first instruction in the catch block + // WebAssembly requires this - we can't wrap it in local.tee or anything else + let popExpr = module.pop(this.options.sizeTypeRef); + + // If there's a catch variable, bind it to the popped exception value + if (catchVariable) { + let catchVarName = catchVariable.text; + // The exception value is a pointer to Error object + let errorClass = this.program.lookup(CommonNames.Error); + let errorType: Type; + if (errorClass && errorClass.kind == ElementKind.ClassPrototype) { + let resolved = this.resolver.resolveClass(errorClass, null); + errorType = resolved ? resolved.type : this.options.usizeType; + } else { + errorType = this.options.usizeType; // Fallback to usize if Error class not found + } + + // Create a scoped local for the catch variable + let catchLocal = catchFlow.addScopedLocal(catchVarName, errorType); + // Use direct local.set without shadow stack to ensure pop is first + catchStmts.push(binaryen._BinaryenLocalSet(module.ref, catchLocal.index, popExpr)); + // Mark the catch variable as initialized + catchFlow.setLocalFlag(catchLocal.index, LocalFlags.Initialized); + } else { + // No catch variable, but still need to pop the exception value + catchStmts.push(module.drop(popExpr)); + } + + // Compile catch block statements + this.compileStatements(catchStatements, catchStmts); + + catchTags.push(tagName); + catchBodies.push(module.flatten(catchStmts)); + catchFlowTerminates = catchFlow.isAny(FlowFlags.Terminates); + } + + // Handle finally clause if present + let finallyStatements = statement.finallyStatements; + if (finallyStatements) { + // Set up pending action pattern for deferred control flow + // pendingAction: 0=normal, 1=return, 2=break, 3=continue + let returnType = outerFlow.returnType; + let targetFunction = outerFlow.targetFunction; + + // Create locals for pending action tracking + let pendingActionLocal = targetFunction.addLocal(Type.i32); + let pendingValueLocal: Local | null = returnType != Type.void + ? targetFunction.addLocal(returnType) + : null; + let pendingValueLocalIndex = pendingValueLocal ? pendingValueLocal.index : -1; + + // Create labels + let dispatchLabel = `finally_dispatch|${label}`; + let outerTryLabel = `try_finally|${label}`; + + // Set up try-finally context on the flows BEFORE compiling try/catch bodies + // We need to recompile try and catch with the context set + outerFlow.popControlFlowLabel(label); + + // Re-fork flows with try-finally context + let label2 = outerFlow.pushControlFlowLabel(); + tryLabel = `try|${label2}`; + + tryFlow = outerFlow.fork(); + tryFlow.tryFinallyPendingActionLocal = pendingActionLocal.index; + tryFlow.tryFinallyPendingValueLocal = pendingValueLocalIndex; + tryFlow.tryFinallyDispatchLabel = dispatchLabel; + tryFlow.tryFinallyReturnType = returnType; + + this.currentFlow = tryFlow; + let tryStmts2 = new Array(); + this.compileStatements(statement.bodyStatements, tryStmts2); + tryBodyExpr = module.flatten(tryStmts2); + tryFlowTerminates = tryFlow.isAny(FlowFlags.Terminates); + + // Recompile catch with context if present + catchTags = []; + catchBodies = []; + catchFlow = null; + catchFlowTerminates = false; + + if (catchStatements) { + catchFlow = outerFlow.fork(); + catchFlow.tryFinallyPendingActionLocal = pendingActionLocal.index; + catchFlow.tryFinallyPendingValueLocal = pendingValueLocalIndex; + catchFlow.tryFinallyDispatchLabel = dispatchLabel; + catchFlow.tryFinallyReturnType = returnType; + + this.currentFlow = catchFlow; + + let catchStmts2 = new Array(); + let popExpr = module.pop(this.options.sizeTypeRef); + + if (catchVariable) { + let catchVarName = catchVariable.text; + let errorClass = this.program.lookup(CommonNames.Error); + let errorType: Type; + if (errorClass && errorClass.kind == ElementKind.ClassPrototype) { + let resolved = this.resolver.resolveClass(errorClass, null); + errorType = resolved ? resolved.type : this.options.usizeType; + } else { + errorType = this.options.usizeType; + } + let catchLocal = catchFlow.addScopedLocal(catchVarName, errorType); + catchStmts2.push(binaryen._BinaryenLocalSet(module.ref, catchLocal.index, popExpr)); + catchFlow.setLocalFlag(catchLocal.index, LocalFlags.Initialized); + } else { + catchStmts2.push(module.drop(popExpr)); + } + + this.compileStatements(catchStatements, catchStmts2); + + catchTags.push(tagName); + catchBodies.push(module.flatten(catchStmts2)); + catchFlowTerminates = catchFlow.isAny(FlowFlags.Terminates); + } + + this.currentFlow = outerFlow; + + // Build the inner try-catch (if there's a catch clause) + let innerTryExpr: ExpressionRef; + if (catchBodies.length > 0) { + innerTryExpr = module.try(tryLabel, tryBodyExpr, catchTags, catchBodies, null); + } else { + innerTryExpr = tryBodyExpr; + } + + // Compile finally statements for the catch_all path (exception handling) + let finallyFlow1 = outerFlow.fork(); + this.currentFlow = finallyFlow1; + let finallyStmts1 = new Array(); + this.compileStatements(finallyStatements, finallyStmts1); + let finallyExpr1 = module.flatten(finallyStmts1); + + // Create catch_all body: run finally, then rethrow + let catchAllBody = module.block(null, [ + finallyExpr1, + module.rethrow(outerTryLabel) + ]); + + // Outer try with catch_all for exception path + let outerTryExpr = module.try( + outerTryLabel, + innerTryExpr, + [], + [catchAllBody], + null + ); + + // Compile finally statements for the normal/deferred path + let finallyFlow2 = outerFlow.fork(); + this.currentFlow = finallyFlow2; + let finallyStmts2 = new Array(); + this.compileStatements(finallyStatements, finallyStmts2); + let finallyExpr2 = module.flatten(finallyStmts2); + let finallyTerminates = finallyFlow2.isAny(FlowFlags.Terminates); + let finallyReturns = finallyFlow2.isAny(FlowFlags.Returns); + + this.currentFlow = outerFlow; + outerFlow.popControlFlowLabel(label2); + + // Build the dispatch logic after finally + let dispatchStmts = new Array(); + + // Run finally code + dispatchStmts.push(finallyExpr2); + + // If finally always returns/terminates, skip dispatch logic + if (!finallyTerminates) { + // Dispatch based on pendingAction + // if (pendingAction == 1) return pendingValue; + if (returnType != Type.void && pendingValueLocal) { + dispatchStmts.push( + module.if( + module.binary(BinaryOp.EqI32, + module.local_get(pendingActionLocal.index, TypeRef.I32), + module.i32(1) + ), + module.return(module.local_get(pendingValueLocal.index, returnType.toRef())) + ) + ); + } else { + dispatchStmts.push( + module.if( + module.binary(BinaryOp.EqI32, + module.local_get(pendingActionLocal.index, TypeRef.I32), + module.i32(1) + ), + module.return() + ) + ); + } + } + + // Wrap the try in a block that return can branch to + let tryBlock = module.block(dispatchLabel, [outerTryExpr]); + + // Only add unreachable if all paths terminate (no normal completion possible) + // If try or catch can complete normally, we need to fall through + let allPathsTerminate = catchFlow + ? (tryFlowTerminates && catchFlowTerminates) + : tryFlowTerminates; + if (!finallyTerminates && allPathsTerminate) { + dispatchStmts.push(module.unreachable()); + } + + let fullBlockStmts = new Array(1 + dispatchStmts.length); + fullBlockStmts[0] = tryBlock; + for (let i = 0; i < dispatchStmts.length; i++) { + fullBlockStmts[1 + i] = dispatchStmts[i]; + } + let fullBlock = module.block(null, fullBlockStmts); + + // Merge flow states + // If finally always terminates, the whole construct terminates + if (finallyTerminates) { + outerFlow.set(FlowFlags.Terminates); + if (finallyReturns) { + outerFlow.set(FlowFlags.Returns); + } + } else if (catchFlow) { + if (tryFlowTerminates && catchFlowTerminates) { + outerFlow.set(FlowFlags.Terminates); + } else { + outerFlow.inheritAlternatives(tryFlow, catchFlow); + } + } else { + outerFlow.mergeSideEffects(tryFlow); + } + + return fullBlock; + } + + // No finally clause + outerFlow.popControlFlowLabel(label); + this.currentFlow = outerFlow; + + // Merge flow states + if (catchFlow) { + if (tryFlowTerminates && catchFlowTerminates) { + outerFlow.set(FlowFlags.Terminates); + } else if (!catchStatements) { + // No catch, only try + outerFlow.inherit(tryFlow); + } else { + outerFlow.inheritAlternatives(tryFlow, catchFlow); + } + } + + // If no catch handlers, just return the try body (exceptions propagate) + if (catchBodies.length == 0) { + return tryBodyExpr; + } + + return module.try(tryLabel, tryBodyExpr, catchTags, catchBodies, null); } /** Compiles a variable statement. Returns `0` if an initializer is not necessary. */ @@ -3238,6 +3813,29 @@ export class Compiler extends DiagnosticEmitter { flow.unsetLocalFlag(local.index, ~0); if (isConst) flow.setLocalFlag(local.index, LocalFlags.Constant); } + + // On recompilation, check if this local matches a known captured variable + // (captures are discovered during first pass when compiling inner functions) + let sourceFunc = flow.sourceFunction; + let capturedLocals = sourceFunc.capturedLocals; + if (capturedLocals) { + // Look for a captured local with matching name and parent + for (let _keys = Map_keys(capturedLocals), i = 0, k = _keys.length; i < k; ++i) { + let capturedLocal = _keys[i]; + if (capturedLocal.name == name && capturedLocal.parent == sourceFunc) { + // Found a match - copy capture info to the new local + local.isCaptured = true; + local.envSlotIndex = capturedLocal.envSlotIndex; + local.envOwner = capturedLocal.envOwner; + // Replace the old local in capturedLocals with the new one + let slotIndex = capturedLocals.get(capturedLocal) as i32; + capturedLocals.delete(capturedLocal); + capturedLocals.set(local, slotIndex); + break; + } + } + } + if (initExpr) { initializers.push( this.makeLocalAssignment(local, initExpr, initType ? initType : type, false) @@ -5706,13 +6304,15 @@ export class Compiler extends DiagnosticEmitter { return this.module.unreachable(); } } else if (!(target).declaredByFlow(flow)) { - // TODO: closures - this.error( - DiagnosticCode.Not_implemented_0, - expression.range, - "Closures" - ); - return this.module.unreachable(); + // Closure: we'll handle the store later after compiling the value + if (!(target).isCaptured || (target).envSlotIndex < 0) { + this.error( + DiagnosticCode.Not_implemented_0, + expression.range, + "Closures" + ); + return this.module.unreachable(); + } } if (this.pendingElements.has(target)) { this.error( @@ -6033,6 +6633,40 @@ export class Compiler extends DiagnosticEmitter { assert(type != Type.void); let localIndex = local.index; + // Handle closure store: if the local is captured, always store to the environment + // This applies both in the declaring function and in inner closures + if (local.isCaptured && local.envSlotIndex >= 0) { + let sourceFunc = flow.sourceFunction; + // Check if we're in the declaring function (outer) or in a closure (inner) + let isInDeclaringFunction = local.parent == sourceFunc; + + // In the declaring function, we need to check if environment is set up + // In a closure, we always use the environment + if (!isInDeclaringFunction || sourceFunc.envLocal) { + // Mark the local as initialized for flow analysis + flow.setLocalFlag(localIndex, LocalFlags.Initialized); + if (type.isNullableReference) { + if (!valueType.isNullableReference || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NonNull); + else flow.unsetLocalFlag(localIndex, LocalFlags.NonNull); + } + if (type.isShortIntegerValue) { + if (!flow.canOverflow(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.Wrapped); + else flow.unsetLocalFlag(localIndex, LocalFlags.Wrapped); + } + let storeExpr = this.compileClosureStore(local, valueExpr, valueType); + if (tee) { + // For tee, we need to return the stored value + // Store, then load it back + let loadExpr = this.compileClosureLoad(local, local.declaration); + this.currentType = type; + return module.block(null, [storeExpr, loadExpr], type.toRef()); + } else { + this.currentType = Type.void; + return storeExpr; + } + } + } + if (type.isNullableReference) { if (!valueType.isNullableReference || flow.isNonnull(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.NonNull); else flow.unsetLocalFlag(localIndex, LocalFlags.NonNull); @@ -6042,6 +6676,11 @@ export class Compiler extends DiagnosticEmitter { if (!flow.canOverflow(valueExpr, type)) flow.setLocalFlag(localIndex, LocalFlags.Wrapped); else flow.unsetLocalFlag(localIndex, LocalFlags.Wrapped); } + + // Track that we accessed this as a regular local (for closure recompilation detection) + // Only set if not already captured (to avoid infinite recompilation loops) + if (!local.isCaptured) local.wasAccessedAsLocal = true; + if (tee) { // local = value this.currentType = type; return module.local_tee(localIndex, valueExpr, type.isManaged); @@ -6564,6 +7203,31 @@ export class Compiler extends DiagnosticEmitter { return name; } + /** Ensures the closure environment global variable exists. */ + ensureClosureEnvironmentGlobal(): string { + let name = "~lib/__closure_env"; + if (!this.closureEnvironmentGlobal) { + let module = this.module; + let sizeTypeRef = this.options.sizeTypeRef; + let zero = this.options.isWasm64 ? module.i64(0) : module.i32(0); + this.closureEnvironmentGlobal = module.addGlobal(name, sizeTypeRef, true, zero); + } + return name; + } + + /** Ensures the exception tag for exception handling exists. */ + ensureExceptionTag(): string { + let tagName = "error"; + if (!this.exceptionTagEnsured) { + let module = this.module; + let sizeTypeRef = this.options.sizeTypeRef; + // Tag with single param: pointer to Error object + module.addTag(tagName, sizeTypeRef, TypeRef.None); + this.exceptionTagEnsured = true; + } + return tagName; + } + /** Ensures compilation of the varargs stub for the specified function. */ ensureVarargsStub(original: Function): Function { // A varargs stub is a function called with omitted arguments being zeroed, @@ -7139,9 +7803,61 @@ export class Compiler extends DiagnosticEmitter { ], sizeTypeRef); if (operands) this.operandsTostack(signature, operands); + + // Only set up closure environment handling when closures feature is enabled + if (this.options.hasFeature(Feature.Closures)) { + // Load the _env field from Function object and store to global for closure access + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + let usizeSize = this.options.usizeType.byteSize; + + // Get the offset of _env in the Function class + // _index is u32 (4 bytes), _env follows at offset 4 (wasm32) or 8 (wasm64 with padding) + let envOffset = this.options.isWasm64 ? 8 : 4; + + // We need to evaluate functionArg once, store to temp, then use for both _env and _index + let flow = this.currentFlow; + let funcTemp = flow.getTempLocal(this.options.usizeType); + let funcTempIndex = funcTemp.index; + + let closureStmts: ExpressionRef[] = [ + // Store the function pointer to a temp; evaluating functionArgWithVararg here yields + // the pointer and sets `argumentsLength` (for varargs stubs), once. + module.local_set(funcTempIndex, functionArgWithVararg, true), + // Store _env to global: $~lib/__closure_env = func._env + module.global_set(closureEnvGlobal, + module.load(usizeSize, false, + module.local_get(funcTempIndex, sizeTypeRef), + sizeTypeRef, + envOffset + ) + ) + ]; + + let indexExpr = module.load(4, false, + module.local_get(funcTempIndex, sizeTypeRef), + TypeRef.I32 // ._index + ); + + let expr = module.call_indirect( + null, // TODO: handle multiple tables + module.block(null, closureStmts.concat([indexExpr]), TypeRef.I32), + operands, + signature.paramRefs, + signature.resultRefs + ); + this.currentType = returnType; + // Emit any callee localization (the !allTrivial temp set) before the call. + stmts.push(expr); + return module.flatten(stmts, returnType.toRef()); + } + + // Without closures, use a simpler indirect call. Load the index from + // functionArgWithVararg so `argumentsLength` is set as the index argument (executed + // after the operands), and the callee is evaluated before the arguments (#2994). + let indexExpr = module.load(4, false, functionArgWithVararg, TypeRef.I32); // ._index at offset 0 let expr = module.call_indirect( null, // TODO: handle multiple tables - module.load(4, false, functionArgWithVararg, TypeRef.I32), // ._index + indexExpr, operands, signature.paramRefs, signature.resultRefs @@ -7226,14 +7942,47 @@ export class Compiler extends DiagnosticEmitter { let sourceFunction = flow.sourceFunction; let isNamed = declaration.name.text.length > 0; let isSemanticallyAnonymous = !isNamed || contextualType != Type.void; - let prototype = new FunctionPrototype( - isSemanticallyAnonymous - ? `${isNamed ? declaration.name.text : "anonymous"}|${sourceFunction.nextAnonymousId++}` - : declaration.name.text, - sourceFunction, - declaration, - DecoratorFlags.None - ); + + // Generate the name for this anonymous/named function + let functionName = isSemanticallyAnonymous + ? `${isNamed ? declaration.name.text : "anonymous"}|${sourceFunction.nextAnonymousId++}` + : declaration.name.text; + + // During recompilation, check if this function already exists + // Check in program.instancesByName using the internal name that would be generated + let expectedInternalName = mangleInternalName(functionName, sourceFunction, false); + let existingInstance = this.program.instancesByName.has(expectedInternalName) + ? this.program.instancesByName.get(expectedInternalName) + : null; + if (existingInstance && existingInstance.kind == ElementKind.Function) { + let existingFunc = existingInstance; + if (existingFunc.is(CommonFlags.Compiled)) { + // Already compiled - just return a reference to it + let offset = this.ensureRuntimeFunction(existingFunc); + let capturedLocals = existingFunc.capturedLocals; + if (capturedLocals && capturedLocals.size > 0) { + return this.compileClosureFunctionCreation(existingFunc, sourceFunction); + } + this.currentType = existingFunc.signature.type; + let expr = this.options.isWasm64 + ? this.module.i64(i64_low(offset), i64_high(offset)) + : this.module.i32(i64_low(offset)); + return expr; + } + } + + // Reuse existing prototype if available (during recompilation), otherwise create new + let prototype: FunctionPrototype; + if (existingInstance && existingInstance.kind == ElementKind.Function) { + prototype = (existingInstance).prototype; + } else { + prototype = new FunctionPrototype( + functionName, + sourceFunction, + declaration, + DecoratorFlags.None + ); + } let instance: Function | null; let contextualTypeArguments = cloneMap(flow.contextualTypeArguments); let module = this.module; @@ -7335,6 +8084,23 @@ export class Compiler extends DiagnosticEmitter { contextualTypeArguments ); instance.flow.outer = flow; + + // Analyze captured variables before compiling + let captures = this.analyzeCapturedVariables(declaration, flow); + if (captures.size > 0) { + // Check if closures feature is enabled + if (!this.options.hasFeature(Feature.Closures)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + expression.range, "closures" + ); + return module.unreachable(); + } + instance.capturedLocals = captures; + instance.outerFunction = sourceFunction; + this.ensureClosureEnvironmentsForCaptures(captures, flow); + } + let worked = this.compileFunction(instance); this.currentType = contextualSignature.type; if (!worked) return module.unreachable(); @@ -7344,12 +8110,37 @@ export class Compiler extends DiagnosticEmitter { instance = this.resolver.resolveFunction(prototype, null, contextualTypeArguments); if (!instance) return this.module.unreachable(); instance.flow.outer = flow; + + // Analyze captured variables before compiling + let captures = this.analyzeCapturedVariables(declaration, flow); + if (captures.size > 0) { + // Check if closures feature is enabled + if (!this.options.hasFeature(Feature.Closures)) { + this.error( + DiagnosticCode.Feature_0_is_not_enabled, + expression.range, "closures" + ); + return module.unreachable(); + } + instance.capturedLocals = captures; + instance.outerFunction = sourceFunction; + this.ensureClosureEnvironmentsForCaptures(captures, flow); + } + let worked = this.compileFunction(instance); this.currentType = instance.signature.type; if (!worked) return module.unreachable(); } let offset = this.ensureRuntimeFunction(instance); // reports + + // If this is a closure, we need to allocate the Function object dynamically + // and set the _env field to point to our environment + let capturedLocals = instance.capturedLocals; + if (capturedLocals && capturedLocals.size > 0) { + return this.compileClosureFunctionCreation(instance, sourceFunction); + } + let expr = this.options.isWasm64 ? module.i64(i64_low(offset), i64_high(offset)) : module.i32(i64_low(offset)); @@ -7383,15 +8174,825 @@ export class Compiler extends DiagnosticEmitter { return expr; } - /** Makes sure the enclosing source file of the specified expression has been compiled. */ - private maybeCompileEnclosingSource(expression: Expression): void { - let internalPath = expression.range.source.internalPath; - let filesByName = this.program.filesByName; - assert(filesByName.has(internalPath)); - let enclosingFile = assert(filesByName.get(internalPath)); - if (!enclosingFile.is(CommonFlags.Compiled)) { - this.compileFileByPath(internalPath, expression); - } + // === Closure Support ========================================================================== + + /** Scans a node and its children for captured variables from outer scopes. + * Resolves names to Local objects and calculates slot indices. */ + private scanNodeForCaptures( + node: Node, + outerFlow: Flow, + innerFunctionNames: Set, + captures: Map + ): void { + switch (node.kind) { + case NodeKind.Identifier: { + let ident = node; + let name = ident.text; + // Skip identifiers that are parameters/locals of inner functions + if (innerFunctionNames.has(name)) break; + + // Resolve to Local and calculate slot index + let local = outerFlow.lookupLocal(name); + if (!local) { + local = outerFlow.lookupLocalInOuter(name); + } + if (local && !captures.has(local)) { + local.isCaptured = true; + if (!local.envOwner) { + local.envOwner = local.parent; + } + // Check if local was accessed before capture was discovered - need recompilation + if (local.wasAccessedAsLocal) { + let ownerFunc = local.parent; + ownerFunc.needsCaptureRecompile = true; + } + if (local.envSlotIndex >= 0) { + captures.set(local, local.envSlotIndex); + } else { + // Calculate proper byte offset with alignment + // Consider both current captures AND the outer function's existing captures + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; + // First check existing captured locals on the outer function + // Only consider locals that belong to the SAME envOwner + let envOwner = local.envOwner; + if (envOwner && envOwner.capturedLocals) { + let existingCaptures = changetype>(envOwner.capturedLocals); + for (let _keys = Map_keys(existingCaptures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + // Only consider locals owned by the same function + if (existingLocal.envOwner == envOwner && existingLocal.envSlotIndex >= 0) { + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + } + } + // Then check locals in current captures map that belong to the same envOwner + for (let _keys = Map_keys(captures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + if (existingLocal.envOwner == envOwner && existingLocal.envSlotIndex >= 0) { + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + } + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + captures.set(local, local.envSlotIndex); + } + } + break; + } + case NodeKind.This: { + // Handle 'this' capture + let local = outerFlow.lookupLocal(CommonNames.this_); + if (!local) { + local = outerFlow.lookupLocalInOuter(CommonNames.this_); + } + if (local && !captures.has(local)) { + local.isCaptured = true; + if (!local.envOwner) { + local.envOwner = local.parent; + } + // Check if local was accessed before capture was discovered - need recompilation + if (local.wasAccessedAsLocal) { + let ownerFunc = local.parent; + ownerFunc.needsCaptureRecompile = true; + } + if (local.envSlotIndex >= 0) { + captures.set(local, local.envSlotIndex); + } else { + // Calculate proper byte offset with alignment + // Consider both current captures AND the outer function's existing captures + let ptrSize = this.options.usizeType.byteSize; + let currentOffset = ptrSize; + // First check existing captured locals on the outer function + // Only consider locals that belong to the SAME envOwner + let envOwner = local.envOwner; + if (envOwner && envOwner.capturedLocals) { + let existingCaptures = changetype>(envOwner.capturedLocals); + for (let _keys = Map_keys(existingCaptures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + // Only consider locals owned by the same function + if (existingLocal.envOwner == envOwner && existingLocal.envSlotIndex >= 0) { + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + } + } + // Then check locals in current captures map that belong to the same envOwner + for (let _keys = Map_keys(captures), idx = 0, cnt = _keys.length; idx < cnt; ++idx) { + let existingLocal = _keys[idx]; + if (existingLocal.envOwner == envOwner && existingLocal.envSlotIndex >= 0) { + let endOfSlot = existingLocal.envSlotIndex + existingLocal.type.byteSize; + if (endOfSlot > currentOffset) currentOffset = endOfSlot; + } + } + let typeSize = local.type.byteSize; + let align = typeSize; + currentOffset = (currentOffset + align - 1) & ~(align - 1); + local.envSlotIndex = currentOffset; + captures.set(local, local.envSlotIndex); + } + } + break; + } + case NodeKind.Function: { + // For nested function expressions, scan their body but add their params to inner names + let funcExpr = node; + let decl = funcExpr.declaration; + let params = decl.signature.parameters; + // Scan parameter default values for captures (before adding params to inner names) + for (let i = 0, k = params.length; i < k; i++) { + let paramInit = params[i].initializer; + if (paramInit) { + this.scanNodeForCaptures(paramInit, outerFlow, innerFunctionNames, captures); + } + } + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); + } + let declBody = decl.body; + if (declBody) { + this.scanNodeForCaptures(declBody, outerFlow, innerFunctionNames, captures); + } + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.delete(params[i].name.text); + } + break; + } + // Expression nodes + case NodeKind.Assertion: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Binary: { + let expr = node; + this.scanNodeForCaptures(expr.left, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.right, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Call: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + let args = expr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Comma: { + let expr = node; + let expressions = expr.expressions; + for (let i = 0, k = expressions.length; i < k; i++) { + this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Literal: { + let literal = node; + if (literal.literalKind == LiteralKind.Array) { + let arrLiteral = literal; + let elements = arrLiteral.elementExpressions; + for (let i = 0, k = elements.length; i < k; i++) { + let elem = elements[i]; + if (elem) { + this.scanNodeForCaptures(elem, outerFlow, innerFunctionNames, captures); + } + } + } else if (literal.literalKind == LiteralKind.Object) { + let objLiteral = literal; + let values = objLiteral.values; + for (let i = 0, k = values.length; i < k; i++) { + this.scanNodeForCaptures(values[i], outerFlow, innerFunctionNames, captures); + } + } else if (literal.literalKind == LiteralKind.Template) { + let tmplLiteral = literal; + let expressions = tmplLiteral.expressions; + for (let i = 0, k = expressions.length; i < k; i++) { + this.scanNodeForCaptures(expressions[i], outerFlow, innerFunctionNames, captures); + } + } + // Other literal kinds (Integer, Float, String, RegExp) have no variable refs + break; + } + case NodeKind.ElementAccess: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.elementExpression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.New: { + let expr = node; + this.scanNodeForCaptures(expr.typeName, outerFlow, innerFunctionNames, captures); + let args = expr.args; + for (let i = 0, k = args.length; i < k; i++) { + this.scanNodeForCaptures(args[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Parenthesized: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.PropertyAccess: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Ternary: { + let expr = node; + this.scanNodeForCaptures(expr.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.ifThen, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(expr.ifElse, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.UnaryPostfix: { + let expr = node; + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.UnaryPrefix: { + let expr = node; + this.scanNodeForCaptures(expr.operand, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.InstanceOf: { + let expr = node; + this.scanNodeForCaptures(expr.expression, outerFlow, innerFunctionNames, captures); + break; + } + // Statement nodes + case NodeKind.Block: { + let stmt = node; + let statements = stmt.statements; + for (let i = 0, k = statements.length; i < k; i++) { + this.scanNodeForCaptures(statements[i], outerFlow, innerFunctionNames, captures); + } + break; + } + case NodeKind.Do: { + let stmt = node; + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Expression: { + let stmt = node; + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.For: { + let stmt = node; + let forInit = stmt.initializer; + let forCond = stmt.condition; + let forIncr = stmt.incrementor; + if (forInit) this.scanNodeForCaptures(forInit, outerFlow, innerFunctionNames, captures); + if (forCond) this.scanNodeForCaptures(forCond, outerFlow, innerFunctionNames, captures); + if (forIncr) this.scanNodeForCaptures(forIncr, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.ForOf: { + let stmt = node; + this.scanNodeForCaptures(stmt.variable, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.iterable, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.If: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.ifTrue, outerFlow, innerFunctionNames, captures); + let ifFalse = stmt.ifFalse; + if (ifFalse) this.scanNodeForCaptures(ifFalse, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Return: { + let stmt = node; + let retValue = stmt.value; + if (retValue) this.scanNodeForCaptures(retValue, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Switch: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + let cases = stmt.cases; + for (let i = 0, k = cases.length; i < k; i++) { + let case_ = cases[i]; + let caseLabel = case_.label; + if (caseLabel) this.scanNodeForCaptures(caseLabel, outerFlow, innerFunctionNames, captures); + let stmts = case_.statements; + for (let j = 0, l = stmts.length; j < l; j++) { + this.scanNodeForCaptures(stmts[j], outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.Throw: { + let stmt = node; + this.scanNodeForCaptures(stmt.value, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Try: { + let stmt = node; + let bodyStmts = stmt.bodyStatements; + for (let i = 0, k = bodyStmts.length; i < k; i++) { + this.scanNodeForCaptures(bodyStmts[i], outerFlow, innerFunctionNames, captures); + } + let catchStmts = stmt.catchStatements; + if (catchStmts) { + for (let i = 0, k = catchStmts.length; i < k; i++) { + this.scanNodeForCaptures(catchStmts[i], outerFlow, innerFunctionNames, captures); + } + } + let finallyStmts = stmt.finallyStatements; + if (finallyStmts) { + for (let i = 0, k = finallyStmts.length; i < k; i++) { + this.scanNodeForCaptures(finallyStmts[i], outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.Variable: { + let stmt = node; + let declarations = stmt.declarations; + for (let i = 0, k = declarations.length; i < k; i++) { + let decl = declarations[i]; + // Add the variable name as a local name (not captured from outer) + innerFunctionNames.add(decl.name.text); + let declInit = decl.initializer; + if (declInit) { + this.scanNodeForCaptures(declInit, outerFlow, innerFunctionNames, captures); + } + } + break; + } + case NodeKind.While: { + let stmt = node; + this.scanNodeForCaptures(stmt.condition, outerFlow, innerFunctionNames, captures); + this.scanNodeForCaptures(stmt.body, outerFlow, innerFunctionNames, captures); + break; + } + case NodeKind.Void: { + let stmt = node; + this.scanNodeForCaptures(stmt.expression, outerFlow, innerFunctionNames, captures); + break; + } + + // Leaf nodes - no children to scan, no captures possible + case NodeKind.Null: + case NodeKind.True: + case NodeKind.False: + case NodeKind.Super: + case NodeKind.Constructor: + case NodeKind.Break: + case NodeKind.Continue: + case NodeKind.Empty: + case NodeKind.Omitted: + case NodeKind.Comment: + case NodeKind.Compiled: + break; + + // Class expressions - not supported (will error during compilation) + case NodeKind.Class: + break; + + // Type nodes - types don't contain runtime captures + case NodeKind.TypeName: + case NodeKind.NamedType: + case NodeKind.FunctionType: + case NodeKind.TypeParameter: + case NodeKind.Parameter: // Parameter initializers handled separately in Function case + break; + + // Top-level declarations - should not appear inside function bodies being scanned + case NodeKind.Source: + case NodeKind.ClassDeclaration: + case NodeKind.EnumDeclaration: + case NodeKind.EnumValueDeclaration: + case NodeKind.FunctionDeclaration: + case NodeKind.InterfaceDeclaration: + case NodeKind.NamespaceDeclaration: + case NodeKind.TypeDeclaration: + case NodeKind.Import: + case NodeKind.Export: + case NodeKind.ExportDefault: + case NodeKind.ExportImport: + case NodeKind.Module: + case NodeKind.Decorator: + case NodeKind.IndexSignature: + case NodeKind.FieldDeclaration: + case NodeKind.ImportDeclaration: + case NodeKind.ExportMember: + case NodeKind.MethodDeclaration: + case NodeKind.VariableDeclaration: + case NodeKind.SwitchCase: // Handled inline in Switch case + break; + + default: + assert(false, "scanNodeForCaptures: unhandled node kind: " + (node.kind as i32).toString()); + } + } + + /** Analyzes a function expression to find captured variables from outer scopes. */ + private analyzeCapturedVariables( + declaration: FunctionDeclaration, + outerFlow: Flow + ): Map { + let captures = new Map(); + let innerFunctionNames = new Set(); + + // Scan parameter default values for captures (before adding params to inner names) + let params = declaration.signature.parameters; + for (let i = 0, k = params.length; i < k; i++) { + let paramInit = params[i].initializer; + if (paramInit) { + this.scanNodeForCaptures(paramInit, outerFlow, innerFunctionNames, captures); + } + } + + // Add the function's own parameters to the inner names set + for (let i = 0, k = params.length; i < k; i++) { + innerFunctionNames.add(params[i].name.text); + } + + // Scan the function body + let body = declaration.body; + if (body) { + this.scanNodeForCaptures(body, outerFlow, innerFunctionNames, captures); + } + + return captures; + } + + /** Computes the total size needed for a closure environment. */ + private computeEnvironmentSize(captures: Map): i32 { + // Calculate the total size based on already-assigned slot indices + // The envSlotIndex values were already assigned during capture analysis + // Slot 0 is always reserved for the parent environment pointer + let usizeSize = this.options.usizeType.byteSize; + let maxEnd = usizeSize; // Minimum size is parent pointer slot + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + let endOfSlot = local.envSlotIndex + local.type.byteSize; + if (endOfSlot > maxEnd) maxEnd = endOfSlot; + } + // Ensure total size is aligned to pointer size + return (maxEnd + usizeSize - 1) & ~(usizeSize - 1); + } + + /** Ensures closure environments are set up for all functions that own captured variables. */ + private ensureClosureEnvironmentsForCaptures( + captures: Map, + flow: Flow + ): void { + // Group captures by owner since variables may come from different nesting levels + let envOwners = new Map>(); + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + let owner = assert(local.envOwner); + let ownerCaptures = envOwners.has(owner) ? envOwners.get(owner) : null; + if (!ownerCaptures) { + ownerCaptures = new Map(); + envOwners.set(owner, ownerCaptures); + } + ownerCaptures.set(local, captures.get(local) as i32); + } + for (let _keys = Map_keys(envOwners), i = 0, k = _keys.length; i < k; i++) { + let owner = _keys[i]; + let ownerCaptures = assert(envOwners.get(owner)); + this.ensureClosureEnvironment(owner, ownerCaptures, flow); + } + } + + /** Ensures a closure environment is set up for the outer function. */ + private ensureClosureEnvironment( + outerFunc: Function, + captures: Map, + flow: Flow + ): void { + // If the outer function already has an environment, just merge the captures + if (outerFunc.envLocal) { + // Merge captures into existing environment + let existingCaptures = outerFunc.capturedLocals; + if (existingCaptures) { + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + if (!existingCaptures.has(local)) { + existingCaptures.set(local, captures.get(local) as i32); + } + } + } + return; + } + + // Create a new environment local for the outer function + let usizeType = this.options.usizeType; + outerFunc.envLocal = flow.addScopedLocal("$env", usizeType); + outerFunc.capturedLocals = captures; + + // Compute the environment size + this.computeEnvironmentSize(captures); + } + + /** Compiles the creation of a closure Function object with environment pointer. */ + private compileClosureFunctionCreation( + instance: Function, + outerFunc: Function + ): ExpressionRef { + let module = this.module; + let program = this.program; + let options = this.options; + let sizeTypeRef = options.sizeTypeRef; + let usizeType = options.usizeType; + + // Get the Function wrapper class for this function type + let rtInstance = assert(this.resolver.resolveClass(program.functionPrototype, [instance.type])); + + // Create the Function object dynamically using __new + let classId = rtInstance.id; + let classSize = rtInstance.nextMemoryOffset; + + // Get __new function + let newInstance = program.newInstance; + assert(newInstance); + this.compileFunction(newInstance); + + // Allocate the Function object: __new(size, classId) + let allocExpr = module.call( + newInstance.internalName, + [ + options.isWasm64 ? module.i64(classSize) : module.i32(classSize), + module.i32(classId) + ], + sizeTypeRef + ); + + // Store the allocation result in a temp local + let flow = this.currentFlow; + let funcPtrLocal = flow.getTempLocal(usizeType); + flow.setLocalFlag(funcPtrLocal.index, LocalFlags.Wrapped); + + // Get the environment pointer from the outer function + // For nested closures, the outer function might not own the environment + // - it might be using closureEnvLocal (a cached copy from an even outer function) + let envPtrExpr: ExpressionRef; + let outerEnvLocal = outerFunc.envLocal; + let outerClosureEnvLocal = outerFunc.closureEnvLocal; + if (outerEnvLocal) { + // Outer function owns an environment - use it + envPtrExpr = module.local_get(outerEnvLocal.index, sizeTypeRef); + } else if (outerClosureEnvLocal) { + // Outer function is a closure - use its cached environment from the outer scope + envPtrExpr = module.local_get(outerClosureEnvLocal.index, sizeTypeRef); + } else { + envPtrExpr = options.isWasm64 ? module.i64(0) : module.i32(0); + } + + // Get the function table index + let tableBase = options.tableBase; + if (!tableBase) tableBase = 1; + let funcIndex = tableBase + this.functionTable.indexOf(instance); + + // Get field offsets for Function class + let indexOffset = rtInstance.offsetof("_index"); + let envOffset = rtInstance.offsetof("_env"); + + // Build the block: + // 1. Allocate Function object + // 2. Store _index + // 3. Store _env + // 4. Return pointer + let stmts: ExpressionRef[] = [ + // funcPtr = __new(size, classId) + module.local_set(funcPtrLocal.index, allocExpr, false), + // funcPtr._index = index + module.store(4, // _index is always u32 + module.local_get(funcPtrLocal.index, sizeTypeRef), + module.i32(funcIndex), + TypeRef.I32, + indexOffset + ), + // funcPtr._env = envPtr + module.store(usizeType.byteSize, + module.local_get(funcPtrLocal.index, sizeTypeRef), + envPtrExpr, + sizeTypeRef, + envOffset + ), + // Return funcPtr + module.local_get(funcPtrLocal.index, sizeTypeRef) + ]; + + this.currentType = instance.type; + + return module.block(null, stmts, sizeTypeRef); + } + + /** Gets the environment pointer for accessing a captured variable. */ + private getClosureEnvironmentPointer(capturedLocal: Local): ExpressionRef { + let module = this.module; + let flow = this.currentFlow; + let currentFunc = flow.sourceFunction; + let sizeTypeRef = this.options.sizeTypeRef; + let envOwner = capturedLocal.envOwner; + + // Case 1: We're in the function that owns the environment (the variable was declared here) + let envLocal = currentFunc.envLocal; + if (envOwner == currentFunc && envLocal) { + return module.local_get(envLocal.index, sizeTypeRef); + } + + // Case 2: We're in a closure and need to access a variable from an outer scope + // Start from our closure's environment and traverse parent pointers + let envExpr: ExpressionRef; + let closureEnvLocal = currentFunc.closureEnvLocal; + if (closureEnvLocal) { + envExpr = module.local_get(closureEnvLocal.index, sizeTypeRef); + } else { + // Fallback to global (shouldn't normally happen) + let closureEnvGlobal = this.ensureClosureEnvironmentGlobal(); + envExpr = module.global_get(closureEnvGlobal, sizeTypeRef); + } + + // Count how many levels up we need to go + // Start from current function's outer function and walk up to find envOwner + // Only count functions that have their own environment (envLocal set) + let func: Function | null = currentFunc.outerFunction; + let depth = 0; + while (func && func != envOwner) { + // Only increment depth if this function has its own environment + // Functions without envLocal just pass through their parent's environment + if (func.envLocal) { + depth++; + } + func = func.outerFunction; + } + + // Traverse the parent chain: load parent pointer (at offset 0) `depth` times + for (let i = 0; i < depth; i++) { + envExpr = module.load( + this.options.usizeType.byteSize, + false, // unsigned + envExpr, + sizeTypeRef, + 0 // Parent pointer is at offset 0 + ); + } + + return envExpr; + } + + /** Compiles loading a captured variable from the closure environment. */ + private compileClosureLoad(local: Local, expression: Node | null = null): ExpressionRef { + let module = this.module; + let localType = local.type; + let slotOffset = local.envSlotIndex; + + // Get the environment pointer + let envPtr = this.getClosureEnvironmentPointer(local); + + // Load from the environment: load(envPtr + slotOffset) + this.currentType = localType; + return module.load( + localType.byteSize, + localType.is(TypeFlags.Signed), + envPtr, + localType.toRef(), + slotOffset + ); + } + + /** Compiles storing a value to a captured variable in the closure environment. */ + private compileClosureStore( + local: Local, + valueExpr: ExpressionRef, + valueType: Type + ): ExpressionRef { + let module = this.module; + let localType = local.type; + let slotOffset = local.envSlotIndex; + + // Get the environment pointer + let envPtr = this.getClosureEnvironmentPointer(local); + + // Store to the environment: store(envPtr + slotOffset, value) + return module.store( + localType.byteSize, + envPtr, + valueExpr, + localType.toRef(), + slotOffset + ); + } + + /** Compiles the allocation of a closure environment at function entry. */ + private compileClosureEnvironmentAllocation(instance: Function): ExpressionRef { + let module = this.module; + let program = this.program; + let options = this.options; + let sizeTypeRef = options.sizeTypeRef; + let usizeType = options.usizeType; + + let captures = assert(instance.capturedLocals); + let envLocal = assert(instance.envLocal); + + // Calculate the total size needed for the environment + let envSize = this.computeEnvironmentSize(captures); + + // Get __alloc function for raw memory allocation + let allocInstance = program.allocInstance; + assert(allocInstance); + this.compileFunction(allocInstance); + + // Allocate the environment: __alloc(size) + let allocExpr = module.call( + allocInstance.internalName, + [ + options.isWasm64 ? module.i64(envSize) : module.i32(envSize) + ], + sizeTypeRef + ); + + let stmts: ExpressionRef[] = []; + + // envLocal = __alloc(envSize) + stmts.push( + module.local_set(envLocal.index, allocExpr, false) + ); + + // Store parent environment pointer at slot 0 + // If this is a closure (has outerFunction), use closureEnvLocal as parent + // Otherwise, parent is null (0) + let parentEnvExpr: ExpressionRef; + let closureEnvLocal = instance.closureEnvLocal; + if (closureEnvLocal) { + // This is a nested closure - use the cached closure env as parent + parentEnvExpr = module.local_get(closureEnvLocal.index, sizeTypeRef); + } else { + // This is the outermost function - no parent + parentEnvExpr = options.isWasm64 ? module.i64(0) : module.i32(0); + } + stmts.push( + module.store( + usizeType.byteSize, + module.local_get(envLocal.index, sizeTypeRef), + parentEnvExpr, + sizeTypeRef, + 0 // Parent pointer is at offset 0 + ) + ); + + // Initialize captured parameters in the environment + // Parameters are already initialized, so copy them now + // Local variables (var/let) will be initialized later when they're declared + let signature = instance.signature; + let numParams = signature.parameterTypes.length; + let hasThis = signature.thisType != null; + let paramStartIndex = hasThis ? 1 : 0; + let paramEndIndex = paramStartIndex + numParams; + + for (let _keys = Map_keys(captures), i = 0, k = _keys.length; i < k; i++) { + let local = _keys[i]; + let slotOffset = local.envSlotIndex; + let localType = local.type; + + // Copy parameters and 'this' to the environment + // Local variables (var/let) will be initialized later when their declaration is compiled + let isParameter = local.index >= paramStartIndex && local.index < paramEndIndex; + let isThis = hasThis && local.index == 0; // 'this' is at index 0 in methods + if (isParameter || isThis) { + stmts.push( + module.store( + localType.byteSize, + module.local_get(envLocal.index, sizeTypeRef), + module.local_get(local.index, localType.toRef()), + localType.toRef(), + slotOffset + ) + ); + } + } + + // Mark environment as initialized + this.currentFlow.setLocalFlag(envLocal.index, LocalFlags.Initialized); + + return module.flatten(stmts, TypeRef.None); + } + + /** Makes sure the enclosing source file of the specified expression has been compiled. */ + private maybeCompileEnclosingSource(expression: Expression): void { + let internalPath = expression.range.source.internalPath; + let filesByName = this.program.filesByName; + assert(filesByName.has(internalPath)); + let enclosingFile = assert(filesByName.get(internalPath)); + if (!enclosingFile.is(CommonFlags.Compiled)) { + this.compileFileByPath(internalPath, expression); + } } private compileIdentifierExpression( @@ -7439,6 +9040,22 @@ export class Compiler extends DiagnosticEmitter { } case NodeKind.This: { let thisType = sourceFunction.signature.thisType; + + // Check if 'this' is captured from an outer scope (closure case) + if (!thisType && this.options.hasFeature(Feature.Closures)) { + // Look for 'this' in outer flow - it might be captured + let thisLocal = flow.lookupLocal(CommonNames.this_); + if (!thisLocal) { + thisLocal = flow.lookupLocalInOuter(CommonNames.this_); + } + if (thisLocal && thisLocal.isCaptured && thisLocal.envSlotIndex >= 0) { + // 'this' is captured - load from closure environment + flow.set(FlowFlags.AccessesThis); + this.currentType = thisLocal.type; + return this.compileClosureLoad(thisLocal, expression); + } + } + if (!thisType) { this.error( DiagnosticCode._this_cannot_be_referenced_in_current_location, @@ -7545,6 +9162,31 @@ export class Compiler extends DiagnosticEmitter { return this.compileInlineConstant(local, contextualType, constraints); } let localIndex = local.index; + + // Handle closure access BEFORE initialization check + // Captured variables are stored in the environment, not in flow locals + if (!local.declaredByFlow(flow)) { + // Closure: load from environment (from inner function) + if (local.isCaptured && local.envSlotIndex >= 0) { + this.currentType = localType; + return this.compileClosureLoad(local, expression); + } + // Not a recognized closure - error + this.error( + DiagnosticCode.Not_implemented_0, + expression.range, + "Closures" + ); + return module.unreachable(); + } + // Also handle captured locals in the declaring function + // When a local is captured, its value lives in the environment + let sourceFunc = flow.sourceFunction; + if (local.isCaptured && local.envSlotIndex >= 0 && sourceFunc.envLocal) { + this.currentType = localType; + return this.compileClosureLoad(local, expression); + } + if (!flow.isLocalFlag(localIndex, LocalFlags.Initialized)) { this.error( DiagnosticCode.Variable_0_is_used_before_being_assigned, @@ -7559,15 +9201,10 @@ export class Compiler extends DiagnosticEmitter { this.currentType = localType; } - if (!local.declaredByFlow(flow)) { - // TODO: closures - this.error( - DiagnosticCode.Not_implemented_0, - expression.range, - "Closures" - ); - return module.unreachable(); - } + // Track that we accessed this as a regular local (for closure recompilation detection) + // Only set if not already captured (to avoid infinite recompilation loops) + if (!local.isCaptured) local.wasAccessedAsLocal = true; + let expr = module.local_get(localIndex, localType.toRef()); if (isNonNull && localType.isNullableExternalReference && this.options.hasFeature(Feature.GC)) { // If the local's type is nullable, but its value is known to be non-null, propagate diff --git a/src/dbcatalog.ts b/src/dbcatalog.ts new file mode 100644 index 0000000000..4914081410 --- /dev/null +++ b/src/dbcatalog.ts @@ -0,0 +1,1537 @@ +// ToilDB catalog: emit the `toildb.catalog` custom WASM section. +// +// For every `@database` class, the compiler records each `@collection` field's +// family (from the handle type, `Documents`/`View`/...), key/value type names, +// value data id (FNV-1a of the value class), schema version, generation, and +// replication/placement policy. The host (`toildb::decode_catalog_section`) +// decodes this once at module load to build the per-tenant collection catalog +// with the CORRECT family + schema, instead of lazily defaulting to `record`. +// +// Wire format (little-endian; see toildb/ABI.md): +// u16 version(=1), u16 n_databases +// per db: u32 name_len,name, u16 n_collections +// per coll: u32 name_len,name, u8 family, +// u32 key_len,key, u32 value_len,value, +// u32 value_data_id, u32 schema_version, u32 generation, +// u8 replication, u8 placement, +// u16 n_fields, per field: u32 name_len,name u32 type_len,type u8 is_array, +// u16 n_migrations, per migration: u32 old_schema_version + +import { Program } from "./program"; +import { Source } from "./ast"; +import { CommonFlags } from "./common"; +import { DiagnosticCode } from "./diagnostics"; +import { + ClassDeclaration, + DecoratorKind, + DecoratorNode, + Expression, + FieldDeclaration, + FunctionDeclaration, + IdentifierExpression, + IntegerLiteralExpression, + MethodDeclaration, + NamedTypeNode, + NodeKind, + ObjectLiteralExpression, + PropertyAccessExpression, + StringLiteralExpression, + TypeNode +} from "./ast"; + +/** FNV-1a 32-bit hash, matching `dataTypeId` in the parser. */ +export function fnv1a(name: string): u32 { + let hash = 0x811c9dc5; + for (let i = 0, k = name.length; i < k; ++i) { + hash = Math.imul(hash ^ name.charCodeAt(i), 0x01000193) >>> 0; + } + return hash >>> 0; +} + +/** One field of a `@data` value type, in declaration order. */ +export class FieldLayout { + name: string = ""; + typeName: string = ""; + isArray: bool = false; +} + +function fnvByte(h: u32, b: i32): u32 { + return Math.imul(h ^ (b & 0xff), 0x01000193) >>> 0; +} + +/** Length-prefixed (u32 LE) string fed into the running FNV-1a, so concatenation + * is unambiguous (matches `ScopeId::hash`/`layout_hash` framing in toildb). */ +function fnvStr(h: u32, s: string): u32 { + let n = s.length; + h = fnvByte(h, n & 0xff); + h = fnvByte(h, (n >>> 8) & 0xff); + h = fnvByte(h, (n >>> 16) & 0xff); + h = fnvByte(h, (n >>> 24) & 0xff); + for (let i = 0; i < n; ++i) h = fnvByte(h, s.charCodeAt(i)); + return h >>> 0; +} + +/** + * `schema_version`: a hash over the ORDERED field layout (name, type, is_array), + * NOT the value-type name. Adding, removing, retyping, or REORDERING a field + * changes it - so the runtime can tell a compatible (append-only) change from a + * breaking one, instead of silently misreading old rows. + * + * RECURSIVE into nested `@data` types: when a field's `typeName` is a KNOWN + * `@data` type (a key of `typeMap`) and not already on the `seen` set (cycle + * guard), the SAME running hash continues over that nested type's fields - so a + * breaking change to a NESTED type bumps the OUTER `schema_version` and can be + * `@migrate`d (instead of being refuse-only). This MUST stay byte-identical to + * toildb's `SchemaDescriptor::layout_hash` (the runtime side): the algorithm, + * the `seen` add/remove, and the declaration-order traversal are pinned in lock + * step. A FLAT type (no field whose type is in `typeMap`) hashes to the SAME + * value as the old flat hash, so existing pinned vectors stay green; an absent + * `typeMap` (undefined) is flat/back-compatible. + * + * `typeMap` MUST contain the SAME set of `@data` types as the runtime's + * `toildb.types` registry (collection value types + their nested types, EXCLUDING + * old `*.migration.ts` shapes), or the two hashes diverge: a nested field whose + * type is absent from the map on either side is treated as a LEAF on both sides. + */ +export function layoutHash( + fields: FieldLayout[], + typeMap: Map | null = null, + seen: Set | null = null +): u32 { + let h: u32 = 0x811c9dc5; + return hashFields(h, fields, typeMap, seen); +} + +/** Continue the running FNV-1a hash `h` over `fields` (declaration order), + * recursing into any field whose `typeName` is a known `@data` type in + * `typeMap` and not yet on `seen`. Factored out so both the top-level hash and + * each nested level share ONE traversal, keeping the byte stream identical to + * the runtime. */ +function hashFields( + h: u32, + fields: FieldLayout[], + typeMap: Map | null, + seen: Set | null +): u32 { + for (let i = 0, k = fields.length; i < k; ++i) { + let f = fields[i]; + h = fnvStr(h, f.name); + h = fnvStr(h, f.typeName); + h = fnvByte(h, f.isArray ? 1 : 0); + if (typeMap != null && typeMap.has(f.typeName)) { + let s = seen != null ? seen : new Set(); + if (!s.has(f.typeName)) { + s.add(f.typeName); + h = hashFields(h, typeMap.get(f.typeName), typeMap, s); + s.delete(f.typeName); + } + } + } + return h >>> 0; +} + +/** The recursion type map for `layoutHash`: every `@data` type the runtime's + * `toildb.types` registry also contains (collection value types + their nested + * types), EXCLUDING old `*.migration.ts` shapes (which the runtime registry + * excludes by design). Both sides must recurse through the SAME set, so a + * nested field whose type is NOT here is a leaf on both sides. */ +export function recursionTypeMap(sources: Source[]): Map { + let map = new Map(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + // Old `@data` shapes in a `*.migration.ts` file are internal to the decoder, + // not live value types; the runtime `toildb.types` registry omits them, so the + // compiler's recursion map must omit them too (or the hashes diverge). + if (source.internalPath.endsWith(".migration")) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Data)) continue; + let name = cls.name.text; + if (map.has(name)) continue; + map.set(name, dataFields(cls)); + } + } + return map; +} + +/** Extract the encoded field layout of a `@data` class, in declaration order, + * mirroring `injectDataCodec` (skip static; `Array` -> element + array flag; + * else scalar/string/`Uint8Array`/nested-`@data` by its type name). */ +export function dataFields(cls: ClassDeclaration): FieldLayout[] { + let out = new Array(); + let members = cls.members; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (field.is(CommonFlags.Static)) continue; + let typeNode = field.type; + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) continue; + let named = typeNode; + let typeName = named.name.identifier.text; + let fl = new FieldLayout(); + fl.name = field.name.text; + let typeArgs = named.typeArguments; + if (typeName == "Array" && typeArgs != null && typeArgs.length == 1 && typeArgs[0] instanceof NamedTypeNode) { + fl.typeName = (typeArgs[0]).name.identifier.text; + fl.isArray = true; + } else { + fl.typeName = typeName; + } + out.push(fl); + } + return out; +} + +/** A `@migrate` free function `fn(old: OldType): NewType`. `oldVersion` is the + * layout hash of `OldType` - i.e. the `schema_version` the old rows were written + * under - so a read can dispatch on it and run the transform (lazy migration). */ +export class DataMigration { + oldType: string = ""; + newType: string = ""; + fnName: string = ""; + oldVersion: u32 = 0; + /// `false`: `(old): New` - the function returns the whole new value. + /// `true`: `(old, into): void` - the compiler pre-copies the fields the two + /// layouts share (same name + type), and the function fills only the + /// changed/new fields of `into`. + delta: bool = false; + /// Internal path of the source file the `@migrate` fn (and its old `@data` + /// shapes) live in - the convention requires a `migrations/…*.migration.ts` + /// file, so this is BOTH the enforcement target and, since that file is + /// separate from the value type, the module the woven decoder imports from. + sourceInternalPath: string = ""; +} + +function typeNameOf(t: TypeNode | null): string | null { + if (t == null || !(t instanceof NamedTypeNode)) return null; + return (t).name.identifier.text; +} + +/** Every `@migrate` function across the (non-library) sources. `layouts` maps a + * `@data` class name to its field layout, for the old-version hash. `typeMap` + * (optional) is the recursion type map (see [`recursionTypeMap`]) so the old + * version hashes RECURSIVELY through its nested `@data` fields - matching the + * `schema_version` that old layout was deployed under (or the migratable old + * version would never match a deployed recursive hash). Absent = flat. A + * migration whose param/return is not a single named type, or whose old type + * has no layout, is skipped. */ +export function collectMigrations( + sources: Source[], + layouts: Map, + typeMap: Map | null = null +): DataMigration[] { + let out = new Array(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let s = statements[j]; + if (s.kind != NodeKind.FunctionDeclaration) continue; + let fn = s; + if (!hasDeco(fn.decorators, DecoratorKind.Migrate)) continue; + let sig = fn.signature; + // `(old): New` (full) or `(old, into): void` (delta - shared fields are + // copied for you; the body fills only the changed/new ones of `into`). + let oldType: string | null = null; + let newType: string | null = null; + let delta = false; + if (sig.parameters.length == 1) { + oldType = typeNameOf(sig.parameters[0].type); + newType = typeNameOf(sig.returnType); + } else if (sig.parameters.length == 2) { + oldType = typeNameOf(sig.parameters[0].type); + newType = typeNameOf(sig.parameters[1].type); + delta = true; + } else { + continue; + } + if (oldType == null || newType == null) continue; + let mig = new DataMigration(); + mig.oldType = oldType; + mig.newType = newType; + mig.fnName = fn.name.text; + mig.delta = delta; + mig.oldVersion = layouts.has(oldType) + ? layoutHash(layouts.get(oldType), typeMap) + : fnv1a(oldType); + mig.sourceInternalPath = source.internalPath; + out.push(mig); + } + } + return out; +} + +/** A resolved chain that migrates a stored OLD value all the way to a target + * type: decode `oldType`, then apply `steps` in order (each `@migrate`). For a + * direct migration `steps` has one entry; a chain `V0 -> V1 -> V2` has two. */ +export class MigrationChain { + oldType: string = ""; + oldVersion: u32 = 0; + steps: DataMigration[] = []; +} + +/** Every old type that reaches `target` through a chain of `@migrate` edges, with + * the ordered transforms to apply. A backward breadth-first walk of the migration + * graph (edges OLD -> NEW), so the SHORTEST chain wins and cycles terminate; a + * direct migration is just a one-step chain. This is what lets a row written under + * version 0 reach the current version 2 via `0->1` then `1->2`. */ +export function chainsTo(target: string, migrations: DataMigration[]): MigrationChain[] { + let out = new Array(); + let visited = new Set(); + visited.add(target); + // BFS frontier: a type we can reach `target` from, plus the chain FROM it TO target. + let frontierType = new Array(); + let frontierChain = new Array(); + frontierType.push(target); + frontierChain.push(new Array()); + let head = 0; + while (head < frontierType.length) { + let type = frontierType[head]; + let chain = frontierChain[head]; + head++; + for (let i = 0, k = migrations.length; i < k; ++i) { + let m = migrations[i]; + if (m.newType != type || visited.has(m.oldType)) continue; + visited.add(m.oldType); + // `m` transforms oldType -> type; prepend it so `steps` runs oldType -> target. + let steps = new Array(); + steps.push(m); + for (let s = 0, sk = chain.length; s < sk; ++s) steps.push(chain[s]); + let mc = new MigrationChain(); + mc.oldType = m.oldType; + mc.oldVersion = m.oldVersion; + mc.steps = steps; + out.push(mc); + frontierType.push(m.oldType); + frontierChain.push(steps); + } + } + return out; +} + +/** Map a handle class name to its collection-family wire byte, or -1. */ +function familyByte(handleName: string): i32 { + switch (handleName) { + case "Documents": return 0; + case "View": return 1; + case "Events": return 2; + case "Counter": return 3; + case "Membership": return 4; + case "Unique": return 5; + case "Capacity": return 6; + default: return -1; + } +} + +function hasDeco(decorators: DecoratorNode[] | null, kind: DecoratorKind): bool { + if (decorators == null) return false; + for (let i = 0, k = decorators.length; i < k; ++i) { + if (decorators[i].decoratorKind == kind) return true; + } + return false; +} + +class CollEntry { + name: string = ""; + family: i32 = 0; + keyType: string = ""; + valueType: string = ""; +} + +class DbEntry { + name: string = ""; + collections: CollEntry[] = new Array(); +} + +/** Little-endian byte writer for the section payload. */ +class CatWriter { + bytes: Array = new Array(); + u8(v: i32): void { this.bytes.push((v & 0xff)); } + u16(v: i32): void { this.u8(v & 0xff); this.u8((v >>> 8) & 0xff); } + u32(v: u32): void { + this.u8((v & 0xff)); this.u8(((v >>> 8) & 0xff)); + this.u8(((v >>> 16) & 0xff)); this.u8(((v >>> 24) & 0xff)); + } + /** LE 8-byte unsigned, written as two `u32` halves (low then high). `v` must + * be a non-negative integer representable exactly (`< 2^53`), which covers + * every value this catalog emits through it (`interval_ms` <= 7d in ms, + * `gas_hint`). For a value that can exceed 2^53 (the 60-bit cron minute mask), + * emit the two halves directly via {@link u64lohi}. */ + u64(v: f64): void { + let lo = (v % 4294967296.0); + let hi = Math.floor(v / 4294967296.0); + this.u32(lo); + this.u32(hi); + } + /** LE 8-byte unsigned from explicit low/high 32-bit halves (precision-safe for + * masks wider than 2^53, e.g. the cron minute mask spanning bits 0..59). */ + u64lohi(lo: u32, hi: u32): void { + this.u32(lo); + this.u32(hi); + } + str(s: string): void { + this.u32(s.length); + for (let i = 0, k = s.length; i < k; ++i) this.u8(s.charCodeAt(i) & 0xff); + } + toBytes(): Uint8Array { + let n = this.bytes.length; + let out = new Uint8Array(n); + for (let i = 0; i < n; ++i) out[i] = this.bytes[i]; + return out; + } +} + +function namedArg(named: NamedTypeNode, index: i32): string { + let typeArgs = named.typeArguments; + if (typeArgs != null && typeArgs.length > index) { + let ta = typeArgs[index]; + if (ta instanceof NamedTypeNode) return (ta).name.identifier.text; + } + return ""; +} + +/** + * Build the `toildb.catalog` section bytes, or `null` if the program declares + * no `@database`. + */ +export function buildToilDbCatalog(program: Program): Uint8Array | null { + let databases = new Array(); + let sources = program.sources; + // First pass: the field layout of every `@data` value type, keyed by name, so + // a collection's `schema_version` can be a hash of its value's layout. + let layouts = new Map(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Data)) continue; + layouts.set(cls.name.text, dataFields(cls)); + } + } + // The recursion type map for the (now RECURSIVE) schema_version hash: exactly + // the `@data` types the runtime's `toildb.types` registry contains (excludes + // old `*.migration.ts` shapes). A nested `@data` field whose type is here is + // recursed into; otherwise it is a leaf - on BOTH sides, in lock step. + let typeMap = recursionTypeMap(sources); + // Migratable old versions per value type: the schema_versions a registered + // @migrate can decode. Emitted per collection so the deploy gate admits a + // breaking change whose deployed version is covered (instead of refusing it). + // The old-version hash is recursive too (same `typeMap`), so it matches the + // recursive schema_version the old layout was deployed under. + let migrations = collectMigrations(sources, layouts, typeMap); + // Per value type, the schema_versions it can decode - every old version that + // reaches it through a CHAIN of migrations (not just a direct one), so a deploy + // is admitted for any version a chain converges. + let migByValue = new Map(); + for (let i = 0, k = migrations.length; i < k; ++i) { + let target = migrations[i].newType; + if (migByValue.has(target)) continue; + let versions = new Array(); + let chains = chainsTo(target, migrations); + for (let c = 0, ck = chains.length; c < ck; ++c) versions.push(chains[c].oldVersion); + migByValue.set(target, versions); + } + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Database)) continue; + + let db = new DbEntry(); + db.name = cls.name.text; + let members = cls.members; + for (let m = 0, mk = members.length; m < mk; ++m) { + let member = members[m]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (!hasDeco(field.decorators, DecoratorKind.Collection)) continue; + let typeNode = field.type; + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) continue; + let named = typeNode; + let family = familyByte(named.name.identifier.text); + if (family < 0) continue; + let entry = new CollEntry(); + entry.name = field.name.text; + entry.family = family; + if (family == 3 || family == 6) { + // Counter / Capacity: a single key type; the value is host-owned + // (an i64 rollup / the escrow ledger). + entry.keyType = namedArg(named, 0); + entry.valueType = "i64"; + } else { + // Documents/View/Events/Unique/Membership: key=arg0, value=arg1. + entry.keyType = namedArg(named, 0); + entry.valueType = namedArg(named, 1); + } + db.collections.push(entry); + } + if (db.collections.length > 0) databases.push(db); + } + } + if (databases.length == 0) return null; + + let w = new CatWriter(); + w.u16(1); // version + w.u16(databases.length); + for (let d = 0, dn = databases.length; d < dn; ++d) { + let db = databases[d]; + w.str(db.name); + w.u16(db.collections.length); + for (let c = 0, cn = db.collections.length; c < cn; ++c) { + let coll = db.collections[c]; + w.str(coll.name); + w.u8(coll.family); + w.str(coll.keyType); + w.str(coll.valueType); + let id = fnv1a(coll.valueType); + // The value type's field LAYOUT, if it is a `@data` type. `schema_version` + // hashes it (so a shape change is detectable); the fields are ALSO emitted + // so the deploy gate can compare old vs new layouts (append-only = additive, + // anything else = breaking). A host-owned/scalar value (Counter/Capacity + // `i64`, a non-`@data` value) has no layout: fall back to the name hash and + // emit zero fields. + let hasLayout = layouts.has(coll.valueType); + let fields = hasLayout + ? layouts.get(coll.valueType) + : new Array(); + let schemaVersion = hasLayout ? layoutHash(fields, typeMap) : id; + w.u32(id); // value_data_id (the value type's message-boundary id) + w.u32(schemaVersion); // schema_version (field-layout hash) + w.u32(0); // collection_generation + w.u8(0); // replication = edgeCache + w.u8(0); // placement = hashKey + w.u16(fields.length); // n_fields + for (let f = 0, fn = fields.length; f < fn; ++f) { + w.str(fields[f].name); + w.str(fields[f].typeName); + w.u8(fields[f].isArray ? 1 : 0); + } + let migs = migByValue.has(coll.valueType) + ? migByValue.get(coll.valueType) + : new Array(); + w.u16(migs.length); // n_migrations + for (let mi = 0, mn = migs.length; mi < mn; ++mi) w.u32(migs[mi]); // old_version + } + } + return w.toBytes(); +} + +// `toildb.types` custom section: the field layout of EVERY `@data` type, so the +// deploy gate can resolve a NESTED `@data` field (e.g. `addr: Address`) and +// compare its layout recursively - a flat catalog hash alone misses a change to a +// nested type. Wire format (little-endian): +// u16 n_types, per type: u32 name_len,name, +// u16 n_fields, per field: u32 name_len,name u32 type_len,type u8 is_array +export function buildToilDbTypes(program: Program): Uint8Array | null { + let sources = program.sources; + let names = new Array(); + let fieldsByName = new Map(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + // Old `@data` shapes in a `*.migration.ts` file are internal to the decoder, not + // live collection value types; keep them out of the emitted type registry. + if (source.internalPath.endsWith(".migration")) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Data)) continue; + let name = cls.name.text; + if (fieldsByName.has(name)) continue; + names.push(name); + fieldsByName.set(name, dataFields(cls)); + } + } + if (names.length == 0) return null; + let w = new CatWriter(); + w.u16(names.length); + for (let i = 0, k = names.length; i < k; ++i) { + let name = names[i]; + w.str(name); + let fields = fieldsByName.get(name); + w.u16(fields.length); + for (let f = 0, fn = fields.length; f < fn; ++f) { + w.str(fields[f].name); + w.str(fields[f].typeName); + w.u8(fields[f].isArray ? 1 : 0); + } + } + return w.toBytes(); +} + +class RouteKindEntry { + method: i32 = 0; + kind: i32 = 0; + path: string = ""; +} + +class RouteInfo { + method: i32 = -1; + path: string = ""; +} + +/** Build the `toildb.route_kinds` section bytes, or `null` when no route needs + * an extra runtime DB-policy clamp. The edge already derives the default kind + * from the trusted HTTP method. This section only carries the stricter source + * signal that the method clamp cannot infer: mutating-method routes explicitly + * declared `@query`. + * + * Wire format (LE): + * u16 format_version = 1 + * u16 n_routes + * per route: + * u8 method (same values as runtime Methods / request envelope) + * u8 function_kind (0 = Query) + * str route_pattern (same normalized pattern emitted into __toilMatch) + */ +export function buildToilDbRouteKinds(program: Program): Uint8Array | null { + let routes = new Array(); + let sources = program.sources; + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + let rest = decoOf(cls.decorators, DecoratorKind.Rest); + if (rest == null) continue; + let prefix = restPrefixOf(rest); + let members = cls.members; + for (let m = 0, mn = members.length; m < mn; ++m) { + let member = members[m]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + let routeDeco = routeDecoratorOf(method); + if (routeDeco == null) continue; + let info = routeInfoOf(routeDeco); + if (info == null || isSafeMethod(info.method)) continue; + if (explicitRequestKind(method.decorators) != 0) continue; + let entry = new RouteKindEntry(); + entry.method = info.method; + entry.kind = 0; // FunctionKind::Query + entry.path = joinRoutePath(prefix, info.path); + routes.push(entry); + } + } + } + if (routes.length == 0) return null; + let w = new CatWriter(); + w.u16(1); + w.u16(routes.length); + for (let i = 0, k = routes.length; i < k; ++i) { + w.u8(routes[i].method); + w.u8(routes[i].kind); + w.str(routes[i].path); + } + return w.toBytes(); +} + +function explicitRequestKind(decorators: DecoratorNode[] | null): i32 { + if (decorators == null) return -1; + for (let i = 0, k = decorators.length; i < k; ++i) { + let dk = decorators[i].decoratorKind; + if (dk == DecoratorKind.Query) return 0; + if (dk == DecoratorKind.Action) return 1; + } + return -1; +} + +function isSafeMethod(method: i32): bool { + return method == 0 || method == 5 || method == 6; +} + +function restPrefixOf(deco: DecoratorNode): string { + let args = deco.args; + if (args == null || args.length == 0) return ""; + let a = args[0]; + if (a instanceof StringLiteralExpression) { + let s = (a).value.trim(); + if (s.length == 0 || s == "/") return ""; + if (!s.startsWith("/")) s = "/" + s; + return s.replace(/\/+$/, ""); + } + return ""; +} + +function routeDecoratorOf(method: MethodDeclaration): DecoratorNode | null { + let decos = method.decorators; + if (decos == null) return null; + for (let i = 0, k = decos.length; i < k; ++i) { + switch (decos[i].decoratorKind) { + case DecoratorKind.Route: + case DecoratorKind.Get: + case DecoratorKind.Post: + case DecoratorKind.Put: + case DecoratorKind.Delete: + case DecoratorKind.Patch: + case DecoratorKind.Head: + case DecoratorKind.Options: return decos[i]; + } + } + return null; +} + +function routeInfoOf(deco: DecoratorNode): RouteInfo | null { + let out = new RouteInfo(); + let dk = deco.decoratorKind; + if (dk == DecoratorKind.Route) { + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof ObjectLiteralExpression)) return null; + let obj = args[0]; + let mv = objectField(obj, "method"); + let pv = objectField(obj, "path"); + if (mv == null || pv == null || !(pv instanceof StringLiteralExpression)) return null; + let mName = enumMember(mv); + if (mName == null) return null; + out.method = methodCode(mName); + out.path = (pv).value; + } else { + out.method = verbMethodCode(dk); + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof StringLiteralExpression)) return null; + out.path = (args[0]).value; + } + return out.method >= 0 ? out : null; +} + +function verbMethodCode(dk: DecoratorKind): i32 { + switch (dk) { + case DecoratorKind.Post: return 1; + case DecoratorKind.Put: return 2; + case DecoratorKind.Delete: return 3; + case DecoratorKind.Patch: return 4; + case DecoratorKind.Head: return 5; + case DecoratorKind.Options: return 6; + default: return 0; + } +} + +function methodCode(name: string): i32 { + switch (name) { + case "GET": return 0; + case "POST": return 1; + case "PUT": return 2; + case "DELETE": return 3; + case "PATCH": return 4; + case "HEAD": return 5; + case "OPTIONS": return 6; + default: return -1; + } +} + +function joinRoutePath(prefix: string, routePath: string): string { + let r = routePath.trim(); + if (r.length == 0) r = "/"; + if (!r.startsWith("/")) r = "/" + r; + if (r == "/") return prefix.length > 0 ? prefix : "/"; + if (r.length > 1) r = r.replace(/\/+$/, ""); + let full = prefix + r; + return full.length == 0 ? "/" : full; +} + +// =========================================================================== +// Streams + daemon metadata sections (spec 03 sections 6/7/8, Part 5 layouts). +// +// `toil.surface` - always (per artifact); target mode + surface flags + +// build identity + the hot/cold coherence hashes. +// `toilstream.catalog` - per `@stream` class (hot / legacy). +// `toildaemon.catalog` - the single `@daemon` class + its `@scheduled` tasks +// with the COMPILE-TIME expanded cron bitmasks (F6). +// +// All little-endian; a string is `u32 len` + UTF-8 bytes (CatWriter.str). The +// toiljs parsers and the Rust host read these byte-for-byte against Part 5. +// =========================================================================== + +/** Continue the running FNV-1a `h` over a `u32` value (LE byte order), so a fold + * over a sequence of u32s is unambiguous (same byte framing as `fnvStr`). */ +function fnvU32(h: u32, v: u32): u32 { + h = fnvByte(h, (v & 0xff)); + h = fnvByte(h, ((v >>> 8) & 0xff)); + h = fnvByte(h, ((v >>> 16) & 0xff)); + h = fnvByte(h, ((v >>> 24) & 0xff)); + return h >>> 0; +} + +/** The first decorator of a given kind on a node, or null. */ +function decoOf(decorators: DecoratorNode[] | null, kind: DecoratorKind): DecoratorNode | null { + if (decorators == null) return null; + for (let i = 0, k = decorators.length; i < k; ++i) { + if (decorators[i].decoratorKind == kind) return decorators[i]; + } + return null; +} + +/** The single string-literal argument of a decorator, or null. */ +function stringArg(deco: DecoratorNode): string | null { + let args = deco.args; + if (args == null || args.length == 0) return null; + let a = args[0]; + if (a instanceof StringLiteralExpression) return (a).value; + return null; +} + +/** The first object-literal argument of a decorator, or null. */ +function objectArg(deco: DecoratorNode): ObjectLiteralExpression | null { + let args = deco.args; + if (args == null || args.length == 0) return null; + let a = args[0]; + if (a instanceof ObjectLiteralExpression) return a; + return null; +} + +/** The value expression of a named field in an object literal, or null. */ +function objectField(obj: ObjectLiteralExpression, name: string): Expression | null { + let names = obj.names; + for (let i = 0, k = names.length; i < k; ++i) { + if (names[i].text == name) return obj.values[i]; + } + return null; +} + +/** The trailing member name of an enum access (`StreamScope.Continental` -> + * "Continental"), or null. */ +function enumMember(expr: Expression): string | null { + if (expr instanceof PropertyAccessExpression) { + return (expr).property.text; + } + return null; +} + +/** A non-negative integer-literal field value as a plain number, or -1. Reads the + * literal's SOURCE TEXT (`range.toString()`) and parses the decimal digits, so it + * never touches the branded `i64` value (which is not number-assignable in the + * portable build). Values clamp at `max_frame_bytes`/`ingress_ring_bytes` range. */ +function intField(obj: ObjectLiteralExpression, name: string): f64 { + let v = objectField(obj, name); + if (v != null && v instanceof IntegerLiteralExpression) { + let s = (v).range.toString().trim(); + let value: f64 = 0; + if (s.length == 0) return -1; + for (let i = 0, k = s.length; i < k; ++i) { + let c = s.charCodeAt(i); + if (c < 0x30 || c > 0x39) return -1; // only plain non-negative decimals + value = value * 10.0 + (c - 0x30); + if (value > 4294967295.0) return 4294967295.0; // clamp to u32 ceiling + } + return value; + } + return -1; +} + +/** The named-type field value as its plain identifier text (`message: ChatMsg` + * -> "ChatMsg"), or "" when absent / not a bare identifier. */ +function identField(obj: ObjectLiteralExpression, name: string): string { + let v = objectField(obj, name); + if (v != null && v instanceof IdentifierExpression) { + return (v).text; + } + return ""; +} + +/** The field layout of every `@data` value type, keyed by name (the same set + * `buildToilDbCatalog` builds), so a `@message` type's schema_version recurses + * through the identical map. */ +function dataLayouts(sources: Source[]): Map { + let layouts = new Map(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Data)) continue; + layouts.set(cls.name.text, dataFields(cls)); + } + } + return layouts; +} + +/** The lifecycle-hook presence bitmask of a `@stream` class: bit0 @connect, + * bit1 @message, bit2 @close, bit3 @disconnect (the same ordering as the + * `event_kind` ids minus one; bits 4..7 reserved 0). */ +function streamHookMask(cls: ClassDeclaration): i32 { + let mask = 0; + let members = cls.members; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let decos = (member).decorators; + if (decos == null) continue; + for (let d = 0, dn = decos.length; d < dn; ++d) { + switch (decos[d].decoratorKind) { + case DecoratorKind.Connect: { mask |= 1; break; } + case DecoratorKind.Message: { mask |= 2; break; } + case DecoratorKind.Close: { mask |= 4; break; } + case DecoratorKind.Disconnect: { mask |= 8; break; } + } + } + } + return mask; +} + +/** Build the `toilstream.catalog` section bytes, or `null` if the program + * declares no `@stream` class. Per Part 5 (LE): + * + * u16 format_version = 1 + * u16 n_streams + * per stream: + * str name + * str route + * u8 hook_presence_bitmask (bit0 connect..bit3 disconnect) + * u8 declared_scope (0 regional/L2, 1 continental/L3) + * u8 message_mode (0 raw, 1 @data-typed) + * u32 max_frame_bytes (0 = use plan default) + * u32 ingress_ring_bytes (0 = host chooses) + * u32 message_value_data_id (fnv1a(typeName); 0 when raw) + * u32 message_schema_version (recursive layoutHash; 0 when raw) + * u16 stream_index (0-based position in this array) + */ +export function buildToilStreamCatalog(program: Program): Uint8Array | null { + let sources = program.sources; + // The recursion type map for the recursive message schema_version: the SAME + // set of `@data` types `buildToilDbCatalog`/`buildToilDbTypes` recurse through, + // so a type shared between a `@message` packet and a DB value hashes identically. + let typeMap = recursionTypeMap(sources); + let layouts = dataLayouts(sources); + + let names = new Array(); // declared name (routing key) + let routes = new Array(); // mount path + let masks = new Array(); // hook presence bitmask + let scopes = new Array(); // declared scope byte + let modes = new Array(); // message mode byte + let maxFrames = new Array(); + let ringBytes = new Array(); + let valueDataIds = new Array(); + let schemaVersions = new Array(); + + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Stream)) continue; + let deco = decoOf(cls.decorators, DecoratorKind.Stream); + + // --- declared name / route --- + let declaredName = cls.name.text; + let strA = deco != null ? stringArg(deco) : null; + let objA = deco != null ? objectArg(deco) : null; + if (strA != null) { + let s = strA.trim(); + if (s.startsWith("/")) s = s.substring(1); + if (s.length > 0) declaredName = s; + } else if (objA != null) { + let nameV = objectField(objA, "name"); + if (nameV != null && nameV instanceof StringLiteralExpression) { + let s = (nameV).value.trim(); + if (s.startsWith("/")) s = s.substring(1); + if (s.length > 0) declaredName = s; + } + } + let route = "/" + declaredName; + + // --- scope --- + let scope = 0; // Regional / L2 + if (objA != null) { + let scopeV = objectField(objA, "scope"); + if (scopeV != null) { + let mName = enumMember(scopeV); + if (mName == "Continental") scope = 1; + } + } + + // --- frame / ring sizing hints --- + let maxFrame: u32 = 0; + let ring: u32 = 0; + if (objA != null) { + let mf = intField(objA, "maxFrameBytes"); + if (mf > 0) maxFrame = mf; + let rb = intField(objA, "ingressRingBytes"); + if (rb > 0) ring = rb; + } + + // --- message mode (raw default vs @data-typed) --- + // F3 / doc 03 section 6: typed mode (message_mode = 1) is OPT-IN, keyed + // STRICTLY on the explicit `@stream({ message: SomeDataClass })` config; the + // default is raw bytes. The named `@data` type's value_data_id / recursive + // schema_version reuse the EXACT toildb.catalog pair, so a type shared + // between a `@message` packet and a DB value carries one identity. + let hookMask = streamHookMask(cls); + let messageMode = 0; + let valueDataId: u32 = 0; + let schemaVersion: u32 = 0; + let typedName = objA != null ? identField(objA, "message") : ""; + if (typedName.length > 0 && layouts.has(typedName)) { + messageMode = 1; + valueDataId = fnv1a(typedName); + schemaVersion = layoutHash(layouts.get(typedName), typeMap); + } + + names.push(declaredName); + routes.push(route); + masks.push(hookMask); + scopes.push(scope); + modes.push(messageMode); + maxFrames.push(maxFrame); + ringBytes.push(ring); + valueDataIds.push(valueDataId); + schemaVersions.push(schemaVersion); + } + } + + if (names.length == 0) return null; + + let w = new CatWriter(); + w.u16(1); // format_version + w.u16(names.length); // n_streams + for (let i = 0, k = names.length; i < k; ++i) { + w.str(names[i]); + w.str(routes[i]); + w.u8(masks[i]); + w.u8(scopes[i]); + w.u8(modes[i]); + w.u32(maxFrames[i]); + w.u32(ringBytes[i]); + w.u32(valueDataIds[i]); + w.u32(schemaVersions[i]); + w.u16(i); // stream_index = array position + } + return w.toBytes(); +} + +/** The normalized schedule of a `@scheduled(spec)` task (spec 03 section 2.3). + * The cron minute mask is kept as low/high 32-bit halves because it spans bits + * 0..59 (> 2^53, so it cannot ride a single JS number losslessly). */ +class Schedule { + kind: i32 = 0; // 0 interval, 1 cron + interval_ms: f64 = 0; // interval kind (<= 7d ms, fits a JS number) + cron_minute_lo: u32 = 0; // bits 0..31 + cron_minute_hi: u32 = 0; // bits 32..59 + cron_hour_mask: u32 = 0; // bits 0..23 + cron_dom_mask: u32 = 0; // bits 1..31 + cron_month_mask: i32 = 0; // bits 1..12 (u16) + cron_dow_mask: i32 = 0; // bits 0..6 (u8) + valid: bool = true; +} + +/** Parse an interval string (`30s`/`5m`/`1h`/`7d`) into milliseconds, or -1 if + * not a well-formed interval (digits then one of s/m/h/d, integer >= 1, the + * period >= 1000 ms). Leading zeros allowed; no whitespace; no fraction. */ +function parseIntervalMs(spec: string): f64 { + let n = spec.length; + if (n < 2) return -1; + let unit = spec.charCodeAt(n - 1); + let mul: f64; + if (unit == 0x73) mul = 1000.0; // s + else if (unit == 0x6d) mul = 60000.0; // m + else if (unit == 0x68) mul = 3600000.0; // h + else if (unit == 0x64) mul = 86400000.0; // d + else return -1; + let value: f64 = 0; + for (let i = 0; i < n - 1; ++i) { + let c = spec.charCodeAt(i); + if (c < 0x30 || c > 0x39) return -1; // not a digit + value = value * 10.0 + (c - 0x30); + if (value > 1.0e15) return -1; // absurdly large; reject + } + if (value < 1) return -1; + let ms = value * mul; + if (ms < 1000.0) return -1; + return ms; +} + +/** Parse a non-negative decimal integer, or -1 (rejects empty / non-digit). */ +function parseCronInt(s: string): i32 { + if (s.length == 0) return -1; + let v = 0; + for (let i = 0, k = s.length; i < k; ++i) { + let c = s.charCodeAt(i); + if (c < 0x30 || c > 0x39) return -1; + v = v * 10 + (c - 0x30); + if (v > 1000000) return -1; + } + return v; +} + +/** Expand one cron field into a set of bit positions: a star, a star-slash-step, + * a range "a-b", a comma list "a,b,c", or a bare integer; within `[lo, hi]` + * inclusive, calling `set(bit)` for each. False on a malformed/out-of-range token. */ +function expandCronField(field: string, lo: i32, hi: i32, set: (bit: i32) => void): bool { + if (field.length == 0) return false; + let tokens = field.split(","); + for (let t = 0, tn = tokens.length; t < tn; ++t) { + let tok = tokens[t]; + if (tok.length == 0) return false; + let rangeLo = lo; + let rangeHi = hi; + let step = 1; + let body = tok; + let slash = tok.indexOf("/"); + if (slash >= 0) { + body = tok.substring(0, slash); + let sv = parseCronInt(tok.substring(slash + 1)); + if (sv < 1) return false; + step = sv; + } + if (body == "*") { + // full field range (default lo..hi) + } else { + let dash = body.indexOf("-"); + if (dash >= 0) { + let a = parseCronInt(body.substring(0, dash)); + let b = parseCronInt(body.substring(dash + 1)); + if (a < 0 || b < 0 || a < lo || b > hi || a > b) return false; + rangeLo = a; + rangeHi = b; + } else { + let v = parseCronInt(body); + if (v < 0 || v < lo || v > hi) return false; + // a bare integer is a single value; `n/k` is a stepped range up to hi. + rangeLo = v; + rangeHi = (slash >= 0) ? hi : v; + } + } + for (let b = rangeLo; b <= rangeHi; b += step) set(b); + } + return true; +} + +/** Parse a 5-field cron expression into the schedule bitmasks, marking invalid + * on any malformed field. Fields: minute(0-59) hour(0-23) dom(1-31) month(1-12) + * dow(0-6, 0=Sunday). */ +function parseCron(spec: string, sch: Schedule): void { + let fields = spec.split(" "); + if (fields.length != 5) { sch.valid = false; return; } + sch.kind = 1; + + let minuteLo: u32 = 0; + let minuteHi: u32 = 0; + let okMin = expandCronField(fields[0], 0, 59, (bit: i32): void => { + if (bit < 32) minuteLo = (minuteLo | (1 << bit)) >>> 0; + else minuteHi = (minuteHi | (1 << (bit - 32))) >>> 0; + }); + sch.cron_minute_lo = minuteLo; + sch.cron_minute_hi = minuteHi; + + let hourMask: u32 = 0; + let okHour = expandCronField(fields[1], 0, 23, (bit: i32): void => { + hourMask = (hourMask | (1 << bit)) >>> 0; + }); + sch.cron_hour_mask = hourMask; + + let domMask: u32 = 0; + let okDom = expandCronField(fields[2], 1, 31, (bit: i32): void => { + domMask = (domMask | (1 << bit)) >>> 0; + }); + sch.cron_dom_mask = domMask; + + let monthMask = 0; + let okMonth = expandCronField(fields[3], 1, 12, (bit: i32): void => { + monthMask = monthMask | (1 << bit); + }); + sch.cron_month_mask = monthMask & 0xffff; + + let dowMask = 0; + let okDow = expandCronField(fields[4], 0, 6, (bit: i32): void => { + dowMask = dowMask | (1 << bit); + }); + sch.cron_dow_mask = dowMask & 0xff; + + if (!(okMin && okHour && okDom && okMonth && okDow)) sch.valid = false; +} + +/** Parse a `@scheduled` spec string into a normalized {@link Schedule}. Per spec + * 03 section 2.1: trim; a space means cron; else an interval (digits + one of + * s/m/h/d); else invalid. */ +function parseSchedule(rawSpec: string): Schedule { + let sch = new Schedule(); + let spec = rawSpec.trim(); + if (spec.length == 0) { sch.valid = false; return sch; } + if (spec.indexOf(" ") >= 0) { + parseCron(spec, sch); + return sch; + } + let ms = parseIntervalMs(spec); + if (ms < 0) { sch.valid = false; return sch; } + sch.kind = 0; + sch.interval_ms = ms; + return sch; +} + +/** One `@scheduled` task collected from the `@daemon` class. */ +class ScheduledTask { + name: string = ""; + schedule: Schedule = new Schedule(); +} + +/** Build the `toildaemon.catalog` section bytes, or `null` if the program + * declares no `@daemon` class. Per Part 5 (LE): + * + * u16 format_version = 1 + * u8 has_daemon + * u16 n_scheduled + * per task: + * str name + * u16 task_index + * u8 schedule_kind (0 interval, 1 cron) + * u64 interval_ms + * u64 cron_minute_mask (bits 0..59) + * u32 cron_hour_mask + * u32 cron_dom_mask + * u16 cron_month_mask + * u8 cron_dow_mask + * u8 overlap_policy (0 default) + * u8 catchup_policy (0 default) + * u64 gas_hint + * + * Parses each `@scheduled(spec)` argument; fires diagnostics 9010/9011 for a + * missing/non-string arg or an unparseable spec. + */ +export function buildToilDaemonCatalog(program: Program): Uint8Array | null { + let sources = program.sources; + let daemon: ClassDeclaration | null = null; + for (let i = 0, k = sources.length; i < k && daemon == null; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (hasDeco(cls.decorators, DecoratorKind.Daemon)) { daemon = cls; break; } + } + } + if (daemon == null) return null; + + let tasks = new Array(); + let members = daemon.members; + for (let m = 0, mk = members.length; m < mk; ++m) { + let member = members[m]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + let deco = decoOf(method.decorators, DecoratorKind.Scheduled); + if (deco == null) continue; + let spec = stringArg(deco); + if (spec == null) { + // missing / non-string-literal schedule argument + program.error( + DiagnosticCode.Scheduled_requires_a_single_string_schedule_argument, + deco.range + ); + continue; + } + let schedule = parseSchedule(spec); + if (!schedule.valid) { + program.error( + DiagnosticCode.Scheduled_spec_0_is_not_a_valid_interval_or_cron_expression, + deco.range, + spec + ); + continue; + } + let task = new ScheduledTask(); + task.name = method.name.text; + task.schedule = schedule; + tasks.push(task); + } + + let w = new CatWriter(); + w.u16(1); // format_version + w.u8(1); // has_daemon (always 1 when the section is present) + w.u16(tasks.length); // n_scheduled + for (let t = 0, tn = tasks.length; t < tn; ++t) { + let task = tasks[t]; + let s = task.schedule; + w.str(task.name); + w.u16(t); // task_index = declaration order + w.u8(s.kind); // schedule_kind + w.u64(s.kind == 0 ? s.interval_ms : 0.0); // interval_ms (0 for cron) + if (s.kind == 1) { + w.u64lohi(s.cron_minute_lo, s.cron_minute_hi); // cron_minute_mask + w.u32(s.cron_hour_mask); + w.u32(s.cron_dom_mask); + w.u16(s.cron_month_mask); + w.u8(s.cron_dow_mask); + } else { + w.u64lohi(0, 0); // cron_minute_mask + w.u32(0); // cron_hour_mask + w.u32(0); // cron_dom_mask + w.u16(0); // cron_month_mask + w.u8(0); // cron_dow_mask + } + w.u8(0); // overlap_policy (0 = skip-if-running) + w.u8(0); // catchup_policy (0 = no-backfill) + w.u64(0.0); // gas_hint (0 = use plan default) + } + return w.toBytes(); +} + +/** True if the (non-library) sources declare ANY Toil surface decorator + * (`@rest`/`@stream`/`@daemon`/`@scheduled`/`@database`/`@data`). Used to keep a + * bare AssemblyScript module (none of these) free of a `toil.surface` section in + * legacy mode, so an ordinary AS compile stays byte-identical. */ +function hasToilSurface(sources: Source[]): bool { + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind == NodeKind.ClassDeclaration) { + let cls = statement; + let decos = cls.decorators; + if (decos != null) { + for (let d = 0, dn = decos.length; d < dn; ++d) { + switch (decos[d].decoratorKind) { + case DecoratorKind.Rest: + case DecoratorKind.Stream: + case DecoratorKind.Daemon: + case DecoratorKind.Database: + case DecoratorKind.Data: return true; + } + } + } + let members = cls.members; + for (let mm = 0, mk = members.length; mm < mk; ++mm) { + let member = members[mm]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let mdecos = (member).decorators; + if (mdecos == null) continue; + for (let d = 0, dn = mdecos.length; d < dn; ++d) { + if (mdecos[d].decoratorKind == DecoratorKind.Scheduled) return true; + } + } + } + } + } + return false; +} + +/** Bit positions of `surface_flags` (Part 5): bit0 rest, bit1 stream, bit2 + * daemon, bit3 scheduled, bit4 database, bit5 render. */ +const SURFACE_REST: i32 = 1 << 0; +const SURFACE_STREAM: i32 = 1 << 1; +const SURFACE_DAEMON: i32 = 1 << 2; +const SURFACE_SCHEDULED: i32 = 1 << 3; +const SURFACE_DATABASE: i32 = 1 << 4; + +/** Scan the (non-library) sources once and compute the `surface_flags` bitmask + * from which decorators are present, mirroring the catalog builders' scans. + * Bit5 (render) is not yet emitted by this increment. */ +function computeSurfaceFlags(sources: Source[]): u32 { + let flags = 0; + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + let decos = cls.decorators; + if (decos != null) { + for (let d = 0, dn = decos.length; d < dn; ++d) { + switch (decos[d].decoratorKind) { + case DecoratorKind.Rest: { flags |= SURFACE_REST; break; } + case DecoratorKind.Stream: { flags |= SURFACE_STREAM; break; } + case DecoratorKind.Daemon: { flags |= SURFACE_DAEMON; break; } + case DecoratorKind.Database: { flags |= SURFACE_DATABASE; break; } + } + } + } + // `@scheduled` lives on a method inside a `@daemon` class. + let members = cls.members; + for (let mm = 0, mk = members.length; mm < mk; ++mm) { + let member = members[mm]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let mdecos = (member).decorators; + if (mdecos == null) continue; + for (let d = 0, dn = mdecos.length; d < dn; ++d) { + if (mdecos[d].decoratorKind == DecoratorKind.Scheduled) { flags |= SURFACE_SCHEDULED; break; } + } + } + } + } + return flags >>> 0; +} + +/** The hot/cold `data_coherence_hash` (Part 5 / doc 02 section 7.2 / AN-4): an + * FNV-1a over the SHARED `@data` surface, computed with the SAME `layoutHash` / + * `recursionTypeMap` machinery that produces each collection's `schema_version`. + * Iterating types in source-declaration order (deterministic and identical + * across the hot and the cold pass over the same files) folds, per type, its + * name then its recursive layout hash, so any shared `@data` shape change moves + * this hash and a hot/cold mismatch is unloadable. */ +function dataCoherenceHash(sources: Source[]): u32 { + let typeMap = recursionTypeMap(sources); + let h: u32 = 0x811c9dc5; + // Same traversal + skip rules as `recursionTypeMap`/`buildToilDbTypes` (omit + // libraries and `*.migration` shapes) so both passes fold the identical set + // in the identical order. + let seenNames = new Set(); + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + if (source.internalPath.endsWith(".migration")) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Data)) continue; + let name = cls.name.text; + if (seenNames.has(name)) continue; + seenNames.add(name); + h = fnvStr(h, name); + h = fnvU32(h, layoutHash(dataFields(cls), typeMap)); + } + } + return h >>> 0; +} + +/** The `pair_coherence_hash` (Part 5 / doc 02 section 7.2): an FNV-1a fold of + * `(build_id, data_coherence_hash, n_collections, each collection's + * value_data_id + schema_version + generation in `toildb.catalog` order)`. It + * re-walks `@database` collections in the SAME order `buildToilDbCatalog` emits + * them, so both passes (same files) compute the same value. `generation` is 0 + * for v1 (the compiler does not yet stamp it). */ +function pairCoherenceHash(sources: Source[], buildId: string, dataHash: u32): u32 { + let typeMap = recursionTypeMap(sources); + let layouts = dataLayouts(sources); + let h: u32 = 0x811c9dc5; + h = fnvStr(h, buildId); + h = fnvU32(h, dataHash); + let ids = new Array(); // value_data_id, catalog order + let versions = new Array(); // schema_version, catalog order + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind != NodeKind.ClassDeclaration) continue; + let cls = statement; + if (!hasDeco(cls.decorators, DecoratorKind.Database)) continue; + let members = cls.members; + for (let mm = 0, mk = members.length; mm < mk; ++mm) { + let member = members[mm]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (!hasDeco(field.decorators, DecoratorKind.Collection)) continue; + let typeNode = field.type; + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) continue; + let named = typeNode; + let famName = named.name.identifier.text; + let valueType: string; + if (famName == "Counter" || famName == "Capacity") { + valueType = "i64"; + } else { + let ta = named.typeArguments; + valueType = (ta != null && ta.length > 1 && ta[1] instanceof NamedTypeNode) + ? (ta[1]).name.identifier.text + : ""; + } + let id = fnv1a(valueType); + let hasLayout = layouts.has(valueType); + let schemaVersion = hasLayout + ? layoutHash(layouts.get(valueType), typeMap) + : id; + ids.push(id); + versions.push(schemaVersion); + } + } + } + h = fnvU32(h, ids.length); // n_collections + for (let c = 0, cn = ids.length; c < cn; ++c) { + h = fnvU32(h, ids[c]); // value_data_id + h = fnvU32(h, versions[c]); // schema_version + h = fnvU32(h, 0); // generation (0 for v1) + } + return h >>> 0; +} + +/** Build the `toil.surface` section bytes (always emitted per artifact). Per + * Part 5 (LE): + * + * u16 format_version = 1 + * u8 target_mode (0 hot, 1 cold) + * u8 reserved0 (0) + * u32 surface_flags (bit0 rest..bit5 render) + * u16 abi_version + * str build_id + * u32 fingerprint + * u32 data_coherence_hash + * u32 pair_coherence_hash + * + * `targetMode` "cold" -> 1; "hot" or null (legacy single artifact, treated as + * hot per Part 5) -> 0. The two coherence hashes use the SAME `layoutHash` / + * `recursionTypeMap` machinery as the toildb catalog, so a hot pass and a cold + * pass over the same sources compute identical `data_coherence_hash` and + * `pair_coherence_hash` independently (doc 02 AN-4). `build_id` is empty and + * `abi_version` is 1 in this increment (the toiljs build-identity plumbing and + * the export-name fingerprint component land with the codegen increment). + * + * Returns `null` (no section) for a bare AssemblyScript module compiled in + * LEGACY mode (`targetMode == null`) that declares NO Toil surface at all + * (`@rest`/`@stream`/`@daemon`/`@scheduled`/`@database`/`@data`), so an ordinary + * AS compile stays byte-identical (the same gating philosophy as the existing + * `toildb.catalog`, which is absent without `@database`). Part 5 / doc 02 AN-2 + * requires the section in every TOIL artifact (including a legacy single-artifact + * toil build, which always carries a toil surface); a non-toil module is not a + * toil artifact. An explicit `--targetMode hot|cold` always emits the section. + */ +export function buildToilSurface(program: Program, targetMode: string | null): Uint8Array | null { + let sources = program.sources; + if (targetMode == null && !hasToilSurface(sources)) return null; + let mode = targetMode == "cold" ? 1 : 0; + let surfaceFlags = computeSurfaceFlags(sources); + let abiVersion = 1; + let buildId = ""; + let dataHash = dataCoherenceHash(sources); + let pairHash = pairCoherenceHash(sources, buildId, dataHash); + // fingerprint: FNV-1a over (target_mode, surface_flags, data_coherence_hash). + // Doc 02 section 4.1's fingerprint ALSO folds the sorted export-name list; + // that component is deferred to the export-injection increment (this increment + // emits no exports). What is folded is deterministic and distinguishes a hot + // from a cold build and two builds of different surface within a mode. + let fp: u32 = 0x811c9dc5; + fp = fnvByte(fp, mode); + fp = fnvU32(fp, surfaceFlags); + fp = fnvU32(fp, dataHash); + let fingerprint = fp >>> 0; + + let w = new CatWriter(); + w.u16(1); // format_version + w.u8(mode); // target_mode + w.u8(0); // reserved0 + w.u32(surfaceFlags); // surface_flags + w.u16(abiVersion); // abi_version + w.str(buildId); // build_id + w.u32(fingerprint); // fingerprint + w.u32(dataHash); // data_coherence_hash + w.u32(pairHash); // pair_coherence_hash + return w.toBytes(); +} diff --git a/src/diagnosticMessages.json b/src/diagnosticMessages.json index 016ba4ec3f..cbff170de6 100644 --- a/src/diagnosticMessages.json +++ b/src/diagnosticMessages.json @@ -54,6 +54,7 @@ "Ambiguous operator overload '{0}' (conflicting overloads '{1}' and '{2}').": 240, "An interface or abstract method '{0}' cannot have type parameters.": 241, "Cannot override generic method '{0}' with a non-generic method or vice versa.": 242, + "Only Error or its subclasses can be thrown, but found type '{0}'.": 250, "Importing the table disables some indirect call optimizations.": 901, "Exporting the table disables some indirect call optimizations.": 902, @@ -211,5 +212,20 @@ "Multiple consecutive numeric separators are not permitted.": 6189, "This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?": 6234, "'super' must be called before accessing 'this' in the constructor of a derived class.": 17009, - "'super' must be called before accessing a property of 'super' in the constructor of a derived class.": 17011 + "'super' must be called before accessing a property of 'super' in the constructor of a derived class.": 17011, + + "Decorator '{0}' is not valid in the hot request artifact.": 9000, + "Decorator '{0}' is not valid in the cold daemon artifact.": 9001, + "Only one '@daemon' class is allowed per project.": 9002, + "A project using '@stream' cannot declare '@service' or '@remote'.": 9003, + "Scheduled is only valid inside a '@daemon' class.": 9004, + "Stream hook '{0}' is only valid inside a '@stream' class.": 9005, + "Duplicate stream hook '{0}'.": 9006, + "Stream class '{0}' declares no lifecycle hooks.": 9007, + "Daemon class '{0}' declares no scheduled tasks.": 9008, + "Decorator '{0}' does not accept arguments.": 9009, + "Scheduled requires a single string schedule argument.": 9010, + "Scheduled spec '{0}' is not a valid interval or cron expression.": 9011, + "Scheduled handler '{0}' must take no arguments and return void.": 9012, + "Stream scope must be a StreamScope enum member.": 9013 } diff --git a/src/extra/ast.ts b/src/extra/ast.ts index 699b2e0c71..335b6f79e1 100644 --- a/src/extra/ast.ts +++ b/src/extra/ast.ts @@ -1,7 +1,7 @@ /** * @fileoverview Abstract Syntax Tree extras. * - * Provides serialization of the AssemblyScript AST back to it source form. + * Provides serialization of the ToilScript AST back to it source form. * * @license Apache-2.0 */ diff --git a/src/flow.ts b/src/flow.ts index ddc7941916..9d8e7588a5 100644 --- a/src/flow.ts +++ b/src/flow.ts @@ -265,12 +265,35 @@ export class Flow { trueFlows: Map | null = null; /** Alternative flows if a compound expression is false-ish. */ falseFlows: Map | null = null; + /** Try-finally context: local index for pending action (0=none, 1=return, 2=break, 3=continue). */ + tryFinallyPendingActionLocal: i32 = -1; + /** Try-finally context: local index for pending return value. */ + tryFinallyPendingValueLocal: i32 = -1; + /** Try-finally context: label to branch to for finally dispatch. */ + tryFinallyDispatchLabel: string | null = null; + /** Try-finally context: return type for the pending value. */ + tryFinallyReturnType: Type | null = null; /** Tests if this is an inline flow. */ get isInline(): bool { return this.inlineFunction != null; } + /** Tests if this flow or any parent is in a try-finally context. */ + get isInTryFinally(): bool { + return this.tryFinallyPendingActionLocal >= 0; + } + + /** Gets the try-finally context from this flow or a parent flow. */ + getTryFinallyContext(): Flow | null { + let flow: Flow | null = this; + while (flow) { + if (flow.tryFinallyPendingActionLocal >= 0) return flow; + flow = flow.parent; + } + return null; + } + /** Gets the source function being compiled. Differs from target when inlining. */ get sourceFunction(): Function { // Obtaining the source function is useful when resolving elements relative @@ -536,6 +559,17 @@ export class Flow { return null; } + /** Looks up a local in outer function scopes (for closures). */ + lookupLocalInOuter(name: string): Local | null { + let outerFlow: Flow | null = this.outer; + while (outerFlow) { + let local = outerFlow.lookupLocal(name); + if (local) return local; + outerFlow = outerFlow.outer; + } + return null; + } + /** Looks up the element with the specified name relative to the scope of this flow. */ lookup(name: string): Element | null { let element = this.lookupLocal(name); diff --git a/src/glue/binaryen.d.ts b/src/glue/binaryen.d.ts index 5b693f8fa0..9761ec0986 100644 --- a/src/glue/binaryen.d.ts +++ b/src/glue/binaryen.d.ts @@ -1,7 +1,7 @@ /** * @fileoverview Portable definitions for Binaryen's C-API. * - * tsc uses the .js file next to it, while asc makes it a Wasm import. + * tsc uses the .js file next to it, while toilscript makes it a Wasm import. * * See: https://github.com/WebAssembly/binaryen/blob/main/src/binaryen-c.h * diff --git a/src/glue/binaryen.js b/src/glue/binaryen.js index c47cc5ca77..bfaf536808 100644 --- a/src/glue/binaryen.js +++ b/src/glue/binaryen.js @@ -917,7 +917,7 @@ export const { } = binaryen; // Shims for C-API functions whose Emscripten binding now uses BigInt for i64 -// parameters (built with -sWASM_BIGINT). In portable/JS mode AssemblyScript +// parameters (built with -sWASM_BIGINT). In portable/JS mode ToilScript // represents i64 as Long, so we convert between Long and BigInt here. function toBigInt(long) { diff --git a/src/index-js.ts b/src/index-js.ts index 52fadc6dfb..9ecf069eb1 100644 --- a/src/index-js.ts +++ b/src/index-js.ts @@ -11,6 +11,7 @@ export * from "./flow"; export * from "./module"; export * from "./parser"; export * from "./program"; +export * from "./rpc"; export * from "./resolver"; export * from "./tokenizer"; export * from "./types"; diff --git a/src/index-wasm.ts b/src/index-wasm.ts index b448aa0ae4..8f4b64c787 100644 --- a/src/index-wasm.ts +++ b/src/index-wasm.ts @@ -6,8 +6,8 @@ * as a flat namespace. * * Note though that the compiler sources are written in "portable - * AssemblyScript" that can be compiled to both JavaScript with tsc and - * to WebAssembly with asc, and as such require additional glue code + * ToilScript" that can be compiled to both JavaScript with tsc and + * to WebAssembly with toilscript, and as such require additional glue code * depending on the target. * * When compiling to JavaScript `glue/js/index.js` must be included. @@ -142,6 +142,11 @@ export function setNoUnsafe(options: Options, noUnsafe: bool): void { options.noUnsafe = noUnsafe; } +/** Sets the `targetMode` option ("hot", "cold", or null for legacy single-artifact). */ +export function setTargetMode(options: Options, targetMode: string | null): void { + options.targetMode = targetMode; +} + /** Sets the `lowMemoryLimit` option. */ export function setLowMemoryLimit(options: Options, lowMemoryLimit: i32): void { options.lowMemoryLimit = lowMemoryLimit; @@ -204,6 +209,8 @@ export const FEATURE_EXTENDED_CONST = Feature.ExtendedConst; export const FEATURE_STRINGREF = Feature.Strings; /** Shared-everything threads. */ export const FEATURE_SHARED_EVERYTHING = Feature.SharedEverything; +/** Closures. */ +export const FEATURE_CLOSURES = Feature.Closures; /** All features. */ export const FEATURES_ALL = Feature.All; /** Default features. */ @@ -351,6 +358,9 @@ export function getDependee(program: Program, file: string): string | null { /** Initializes the program pre-emptively for transform hooks. */ export function initializeProgram(program: Program): void { + // Weave @migrate version-dispatch into @data decoders BEFORE element creation, + // so the modified `decodeInto` (not the original) becomes the compiled function. + program.parser.weaveDataMigrations(); program.initialize(); } diff --git a/src/index.ts b/src/index.ts index 781ed0d1a7..cbeb8bfe39 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2020 Daniel Wirtz / The AssemblyScript Authors. + * Copyright 2020 Daniel Wirtz / The ToilScript Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/module.ts b/src/module.ts index c6c68ea710..be5ae57de7 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,7 +1,7 @@ /** * @fileoverview A thin wrapper around Binaryen's C-API. * - * The AssemblyScript compiler utilizes Binaryen's C-API directly. Even + * The ToilScript compiler utilizes Binaryen's C-API directly. Even * though it currently imports binaryen.js, none of the JS APIs it * provides are used. * diff --git a/src/parser.ts b/src/parser.ts index 157351cd3a..b3f62c7199 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,5 +1,5 @@ /** - * @fileoverview A TypeScript parser for the AssemblyScript subset. + * @fileoverview A TypeScript parser for the ToilScript subset. * * Takes the tokens produced by the `Tokenizer` and builds an abstract * syntax tree composed of `Node`s wrapped in a `Source` out of it. @@ -53,6 +53,10 @@ import { FunctionExpression, IdentifierExpression, StringLiteralExpression, + ObjectLiteralExpression, + IntegerLiteralExpression, + PropertyAccessExpression, + MethodDeclaration, Statement, BlockStatement, @@ -61,6 +65,7 @@ import { ContinueStatement, DeclarationStatement, DecoratorNode, + DecoratorKind, DoStatement, EnumDeclaration, EnumValueDeclaration, @@ -68,7 +73,19 @@ import { ExportMember, ExportStatement, ExpressionStatement, + FieldDeclaration, ForOfStatement, + ForStatement, + NewExpression, + ElementAccessExpression, + BinaryExpression, + UnaryPrefixExpression, + UnaryPostfixExpression, + ParenthesizedExpression, + AssertionExpression, + InstanceOfExpression, + TernaryExpression, + CommaExpression, FunctionDeclaration, IfStatement, ImportDeclaration, @@ -93,6 +110,104 @@ import { mangleInternalPath } from "./ast"; import { Options } from "./compiler"; +import { + chainsTo, + collectMigrations, + dataFields, + FieldLayout, + MigrationChain, + recursionTypeMap +} from "./dbcatalog"; + +/** Maps a `@data` field type name to the DataWriter/DataReader method suffix, or "" if unsupported. */ +function dataMethodSuffix(typeName: string): string { + switch (typeName) { + case "u8": return "U8"; + case "u16": return "U16"; + case "u32": return "U32"; + case "u64": return "U64"; + case "i8": return "I8"; + case "i16": return "I16"; + case "i32": return "I32"; + case "i64": return "I64"; + case "f32": return "F32"; + case "f64": return "F64"; + case "bool": + case "boolean": return "Bool"; + case "string": return "String"; + case "u128": return "U128"; + case "i128": return "I128"; + case "u256": return "U256"; + case "i256": return "I256"; + default: return ""; + } +} + +/** Emits the DataWriter statement for one @data value (scalar or nested @data). */ +function dataWriteStmt(typeName: string, valueExpr: string): string { + let suffix = dataMethodSuffix(typeName); + if (suffix.length != 0) return "__w.write" + suffix + "(" + valueExpr + ");"; + return valueExpr + ".encodeInto(__w);"; +} + +/** Emits the DataReader expression for one @data value (scalar or nested @data). */ +function dataReadExpr(typeName: string): string { + let suffix = dataMethodSuffix(typeName); + if (suffix.length != 0) return "__r.read" + suffix + "()"; + return typeName + ".decodeFrom(__r)"; +} + +/** Stable per-class message-boundary id (FNV-1a over the class name). */ +function dataTypeId(name: string): u32 { + let hash = 0x811c9dc5; + for (let i = 0, k = name.length; i < k; ++i) { + hash = Math.imul(hash ^ name.charCodeAt(i), 0x01000193) >>> 0; + } + return hash >>> 0; +} + +/** + * JSON value expression for a @data value (scalar, or nested @data). Integers of 64 bits + * and up are emitted as DECIMAL STRINGS: JSON numbers ride through JavaScript's + * `JSON.parse` as IEEE doubles, which silently corrupt anything past 2^53, so a string + * is the only representation a browser client can revive exactly (`BigInt("...")`). + */ +function jsonOfExpr(typeName: string, valueExpr: string): string { + switch (typeName) { + case "bool": case "boolean": + case "u8": case "u16": case "u32": + case "i8": case "i16": case "i32": + case "f32": case "f64": + case "string": + return "JSON.of<" + typeName + ">(" + valueExpr + ")"; + case "u64": case "i64": + case "u128": case "i128": + case "u256": case "i256": + return "JSON.of(" + valueExpr + ".toString())"; + default: + return valueExpr + ".toJSON()"; + } +} + +/** + * Value read from a JSON node for a @data field. 64-bit reads are string-lenient inside + * the JSON lib itself; the 128/256-bit reads accept the decimal string plus the legacy + * limb-array shape (little-endian 64-bit limbs) older writers emitted. + */ +function jsonReadExpr(typeName: string, jsonExpr: string): string { + switch (typeName) { + case "bool": case "boolean": return jsonExpr + ".asBool()"; + case "u8": case "u16": case "u32": case "u64": return "<" + typeName + ">" + jsonExpr + ".asU64()"; + case "i8": case "i16": case "i32": case "i64": return "<" + typeName + ">" + jsonExpr + ".asI64()"; + case "f32": case "f64": return "<" + typeName + ">" + jsonExpr + ".asF64()"; + case "string": return jsonExpr + ".asString()"; + case "u128": return "(" + jsonExpr + ".isArray() ? new u128(" + jsonExpr + ".at(0).asU64()," + jsonExpr + ".at(1).asU64()) : u128.fromString(" + jsonExpr + ".asString()))"; + case "i128": return "(" + jsonExpr + ".isArray() ? new i128(" + jsonExpr + ".at(0).asU64()," + jsonExpr + ".at(1).asI64()) : i128.fromString(" + jsonExpr + ".asString()))"; + case "u256": return "(" + jsonExpr + ".isArray() ? new u256(" + jsonExpr + ".at(0).asU64()," + jsonExpr + ".at(1).asU64()," + jsonExpr + ".at(2).asU64()," + jsonExpr + ".at(3).asU64()) : u256.fromString(" + jsonExpr + ".asString()))"; + case "i256": return "(" + jsonExpr + ".isArray() ? new i256(" + jsonExpr + ".at(0).asI64()," + jsonExpr + ".at(1).asI64()," + jsonExpr + ".at(2).asI64()," + jsonExpr + ".at(3).asI64()) : i256.fromString(" + jsonExpr + ".asString()))"; + default: return typeName + ".fromJSON(" + jsonExpr + ")"; + } +} /** Represents a dependee. */ class Dependee { @@ -102,6 +217,112 @@ class Dependee { ) {} } +// ---- ToilDB function-kind permission helpers (used by Parser.checkToilDbKinds) ---- + +/** Map a (handle-family, method-name) to the ToilDB op-kind tag, or "" if the + * method is not a known data op (then the type checker, not this pass, owns it). */ +function dbOpOf(family: string, method: string): string { + switch (family) { + case "Documents": { + if (method == "get" || method == "require") return "Get"; + if (method == "getMany") return "GetMany"; + if (method == "exists") return "Exists"; + if (method == "create") return "Create"; + if (method == "patch") return "Patch"; + if (method == "delete") return "Delete"; + if (method == "getDelete") return "GetDelete"; + return ""; + } + case "View": { + if (method == "get" || method == "require") return "ViewGet"; + if (method == "getMany") return "GetMany"; + if (method == "publish") return "ViewPublish"; + return ""; + } + case "Unique": { + if (method == "lookup") return "UniqueLookup"; + if (method == "claim") return "UniqueClaim"; + if (method == "release") return "UniqueRelease"; + return ""; + } + case "Counter": { + if (method == "get") return "CounterGet"; + if (method == "add") return "CounterAdd"; + return ""; + } + case "Events": { + if (method == "append") return "Append"; + if (method == "latest") return "Latest"; + return ""; + } + case "Membership": { + if (method == "contains") return "MembershipContains"; + if (method == "list") return "MembershipList"; + if (method == "add") return "MembershipAdd"; + if (method == "remove") return "MembershipRemove"; + return ""; + } + case "Capacity": { + if (method == "available") return "CapacityAvailable"; + if (method == "reserve") return "CapacityReserve"; + if (method == "confirm") return "CapacityConfirm"; + if (method == "cancel") return "CapacityCancel"; + if (method == "setTotal") return "CapacitySetTotal"; + return ""; + } + default: return ""; + } +} + +function isDbReadOp(op: string): bool { + return op == "Get" || op == "GetMany" || op == "Exists" || op == "ViewGet" || + op == "CounterGet" || op == "UniqueLookup" || op == "Latest" || + op == "MembershipContains" || op == "MembershipList" || op == "CapacityAvailable"; +} + +/** Static mirror of the edge `allowed_ops::kind_allows` (spec 6). */ +function dbKindAllows(kind: i32, op: string): bool { + switch (kind) { + case DecoratorKind.Query: return isDbReadOp(op); + case DecoratorKind.Action: + return isDbReadOp(op) || op == "Create" || op == "Patch" || op == "Delete" || + op == "GetDelete" || op == "Append" || op == "CounterAdd" || op == "UniqueClaim" || + op == "UniqueRelease" || op == "MembershipAdd" || op == "MembershipRemove" || + op == "CapacityReserve" || op == "CapacityConfirm" || op == "CapacityCancel"; + case DecoratorKind.Derive: + return isDbReadOp(op) || op == "ViewPublish" || op == "Append" || op == "CounterAdd"; + case DecoratorKind.Job: return true; + case DecoratorKind.Admin: return false; + // A @migrate is a PURE value transform run during decode (the read path); it + // must not touch the database at all. + case DecoratorKind.Migrate: return false; + default: return true; + } +} + +function dbKindName(kind: i32): string { + switch (kind) { + case DecoratorKind.Query: return "query"; + case DecoratorKind.Action: return "action"; + case DecoratorKind.Job: return "job"; + case DecoratorKind.Derive: return "derive"; + case DecoratorKind.Admin: return "admin"; + case DecoratorKind.Migrate: return "migrate"; + default: return "?"; + } +} + +function dbKindReason(kind: i32): string { + switch (kind) { + case DecoratorKind.Query: return "a query is read-only"; + case DecoratorKind.Action: return "an action cannot publish views"; + case DecoratorKind.Derive: return "a derive may only read, publish views, append events, or add to counters"; + case DecoratorKind.Admin: return "an admin has no request-path data access"; + case DecoratorKind.Migrate: return "a migration is a pure value transform and cannot access the database"; + default: return "not permitted in this kind"; + } +} + /** Parser interface. */ export class Parser extends DiagnosticEmitter { @@ -117,8 +338,23 @@ export class Parser extends DiagnosticEmitter { currentSource: Source | null = null; /** Map of dependees being depended upon by a source, by path. */ dependees: Map = new Map(); + /** Normalized paths whose `@rest` runtime import has already been injected. */ + restImportedSources: Set = new Set(); + /** Monotonic id handed to each `@ratelimit` route so the edge can key one + * shared limiter per route. Program-wide (one Parser per program), assigned + * deterministically in route declaration order. */ + ratelimitRouteCounter: i32 = 0; /** An array of parsed sources. */ sources: Source[]; + /** A `@data` value type's generated field reads (the `decodeFrom` body, `__o.` + * form) keyed by class name, captured so `finish()` can regenerate `decodeInto` + * with a `@migrate` version-dispatch prefix. */ + toildbCodecReads: Map = new Map(); + /** A `@data` value type's declaration, keyed by class name (to find/replace its + * `decodeInto` member when weaving migrations). */ + toildbCodecClasses: Map = new Map(); + /** Guards `weaveDataMigrations` so it runs exactly once (before element creation). */ + toildbWoven: bool = false; /** Current overridden module name. */ currentModuleName: string | null = null; // TODO: Remove when multi-value feature will enable by default. @@ -466,10 +702,498 @@ export class Parser extends DiagnosticEmitter { /** Finishes parsing. */ finish(): void { if (this.backlog.length) throw new Error("backlog is not empty"); + // ToilDB: compile-time function-kind permission check (mirrors the edge + // runtime gate) over the now-complete program. Runs before the cleanup so + // every parsed source is still reachable. + this.checkToilDbKinds(); + // Weave migrations here too, in case `initializeProgram` (which weaves before + // element creation) was skipped; idempotent, so the earlier call wins. + this.weaveDataMigrations(); this.backlog = []; this.seenlog.clear(); this.donelog.clear(); this.dependees.clear(); + this.restImportedSources.clear(); + } + + // ---- ToilDB @migrate weaving (lazy, read-time schema migration; Phase 3b) ---- + // + // For each value type that is the target of a `@migrate(old): New`, regenerate + // its top-level `decodeInto` with a version-dispatch prefix: a row whose stored + // schema_version matches an OLD layout is decoded as the old shape and run + // through the transform; otherwise the current shape decodes as before. A value + // type with no migration is untouched, so the hot read path takes no host call. + + weaveDataMigrations(): void { + if (this.toildbWoven) return; // run once, before program element creation + this.toildbWoven = true; + this.checkMigrationLocations(); + if (this.toildbCodecClasses.size == 0) return; + // Field layouts of every @data value type, for the old-version hash. + let layouts = new Map(); + for (let i = 0, k = this.sources.length; i < k; ++i) { + let source = this.sources[i]; + if (source.isLibrary) continue; + let stmts = source.statements; + for (let j = 0, l = stmts.length; j < l; ++j) { + let s = stmts[j]; + if (s.kind != NodeKind.ClassDeclaration) continue; + let cls = s; + if (this.hasDecoratorKind(cls.decorators, DecoratorKind.Data) || + this.hasDecoratorKind(cls.decorators, DecoratorKind.User)) { + layouts.set(cls.name.text, dataFields(cls)); + } + } + } + // The recursion type map for the (now RECURSIVE) old-version hash: the same + // `@data` set the runtime `toildb.types` registry holds (excludes + // `*.migration.ts` shapes). The woven dispatch matches a stored row's + // schema_version against `oldVersion`, so it MUST hash with the same recursion + // `buildToilDbCatalog` emits into `migratableFrom` - or no old row ever + // dispatches. + let typeMap = recursionTypeMap(this.sources); + let migrations = collectMigrations(this.sources, layouts, typeMap); + if (migrations.length == 0) return; + // Each migration TARGET (a value type) gets a version-dispatching decode; + // chainsTo resolves every old version reaching it, direct OR via a chain. + let seen = new Set(); + for (let i = 0, k = migrations.length; i < k; ++i) { + let target = migrations[i].newType; + if (seen.has(target)) continue; + seen.add(target); + this.weaveDecodeInto(target, chainsTo(target, migrations), layouts); + } + } + + /** Enforce the migration-file convention (folder AND extension): every `@migrate` + * must live in a `*.migration.ts` file under a `migrations/` directory. Keeping + * migrations in one discoverable place is what lets the build auto-parse them and + * the weave inject the cross-file imports; a stray `@migrate` elsewhere would not + * be discovered (silently never run), so it is a hard error. */ + private checkMigrationLocations(): void { + for (let i = 0, k = this.sources.length; i < k; ++i) { + let source = this.sources[i]; + if (source.isLibrary) continue; + let parts = source.internalPath.split("/"); + let last = parts[parts.length - 1]; + let isMigrationFile = last.endsWith(".migration"); + let inMigrationsDir = false; + for (let q = 0, qk = parts.length - 1; q < qk; ++q) { + if (parts[q] == "migrations") { inMigrationsDir = true; break; } + } + if (isMigrationFile && inMigrationsDir) continue; // correctly placed + let stmts = source.statements; + for (let j = 0, l = stmts.length; j < l; ++j) { + let s = stmts[j]; + if (s.kind != NodeKind.FunctionDeclaration) continue; + let fn = s; + if (!this.hasDecoratorKind(fn.decorators, DecoratorKind.Migrate)) continue; + this.error( + DiagnosticCode.User_defined_0, + fn.name.range, + "ToilDB: @migrate must live in a 'migrations/.migration.ts' file (a *.migration.ts " + + "under a migrations/ folder), so the build can discover it. Found in '" + source.internalPath + ".ts'." + ); + } + } + } + + /** Replace `target`'s generated `decodeInto` with a version-dispatching one: a + * row at any chain-reachable old version is decoded as its shape and run forward + * through every transform until it reaches `target`. */ + private weaveDecodeInto( + target: string, + chains: MigrationChain[], + layouts: Map + ): void { + if (!this.toildbCodecClasses.has(target)) return; // not a @data value type + let decl = this.toildbCodecClasses.get(target); + let reads = this.toildbCodecReads.get(target); + let members = decl.members; + // `target`'s instance field names - the final converted value is copied here. + let targetNames = new Array(); + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (field.is(CommonFlags.Static)) continue; + targetNames.push(field.name.text); + } + let dispatch = ""; + for (let c = 0, ck = chains.length; c < ck; ++c) { + let chain = chains[c]; + // Decode the oldest shape (`__m0`), then apply each step to `__m1`, `__m2`... + let body = "const __m0=" + chain.oldType + ".decode(__buf);"; + let n = chain.steps.length; + for (let s = 0; s < n; ++s) { + let step = chain.steps[s]; + let prev = "__m" + s.toString(); + let next = "__m" + (s + 1).toString(); + if (step.delta) { + // shared fields carried for you; the body fills the changed/new ones. + body += "const " + next + "=new " + step.newType + "();" + + this.migrationCarry(step.oldType, step.newType, prev, next, layouts) + + step.fnName + "(" + prev + "," + next + ");"; + } else { + body += "const " + next + "=" + step.fnName + "(" + prev + ");"; + } + } + let last = "__m" + n.toString(); + let copy = ""; + for (let i = 0, k = targetNames.length; i < k; ++i) { + copy += "this." + targetNames[i] + "=" + last + "." + targetNames[i] + ";"; + } + // Dispatch on `__v` - the per-value version passed in (the single-value path + // passes the host's `__toildbReadVersion()`, the multi-value paths pass each + // item's framed version), so a migration fires on EVERY read path, not only get. + dispatch += "if(__v==" + chain.oldVersion.toString() + "){" + + body + copy + "__toildbMarkMigrated();return;}"; + } + // Replace BOTH generated decoders: decodeIntoVersioned carries the dispatch, + // decodeInto delegates to it with the host stash version. + for (let i = members.length - 1; i >= 0; --i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let name = (member).name.text; + if (name == "decodeInto" || name == "decodeIntoVersioned") members.splice(i, 1); + } + this.injectClassMember(decl, + "decodeIntoVersioned(__buf: Uint8Array, __v: i64): void{" + dispatch + + "const __r=new DataReader(__buf);__r.readU32();" + reads.replace(/__o\./g, "this.") + "}"); + this.injectClassMember(decl, + "decodeInto(__buf: Uint8Array): void{this.decodeIntoVersioned(__buf, __toildbReadVersion());}"); + + // Cross-file: the convention puts every `@migrate` (and its old `@data` shapes) + // in a separate `migrations/.migration.ts`, so the woven dispatch above + // references symbols that live in another module. Inject the imports the value + // type's source needs, grouped by migration file, with a computed relative path. + // A same-file symbol (legacy layout) has srcPath == valuePath and is skipped. + let valuePath = decl.range.source.internalPath; + // Parallel arrays (NOT Map.keys(), which is a non-indexable iterator once the + // compiler is bundled to JS): `importSrcs[i]` holds the symbols `importSyms[i]`. + let importSrcs = new Array(); + let importSyms = new Array>(); + for (let c = 0, ck = chains.length; c < ck; ++c) { + let chain = chains[c]; + this.addMigrationImport(importSrcs, importSyms, chain.oldType, this.typeSourcePath(chain.oldType), valuePath); + for (let s = 0, sk = chain.steps.length; s < sk; ++s) { + let step = chain.steps[s]; + this.addMigrationImport(importSrcs, importSyms, step.fnName, step.sourceInternalPath, valuePath); + if (step.newType != target) { + this.addMigrationImport(importSrcs, importSyms, step.newType, this.typeSourcePath(step.newType), valuePath); + } + } + } + for (let p = 0, pk = importSrcs.length; p < pk; ++p) { + let syms = importSyms[p]; + let names = ""; + for (let n = 0, nk = syms.length; n < nk; ++n) { + names += syms[n]; + if (n + 1 < nk) names += ", "; + } + this.injectTopLevelStatements(decl, + "// @ts-ignore: injected migration import\nimport { " + names + + " } from \"" + this.relativeModulePath(valuePath, importSrcs[p]) + "\";\n"); + } + } + + /** Record that `sym` (an old `@data` shape or a transform fn) must be imported + * into the value type's source from `srcPath`. A blank or same-file source is a + * no-op (the symbol is already in scope). Deduped per source via parallel arrays. */ + private addMigrationImport( + srcs: Array, + syms: Array>, + sym: string, + srcPath: string, + valuePath: string + ): void { + if (srcPath.length == 0 || srcPath == valuePath) return; + let idx = srcs.indexOf(srcPath); + if (idx < 0) { srcs.push(srcPath); syms.push(new Array()); idx = srcs.length - 1; } + let arr = syms[idx]; + if (arr.indexOf(sym) < 0) arr.push(sym); + } + + /** Internal path of the source declaring the `@data` class `name`, or "" if it + * isn't a known `@data` type (then there is nothing to import). */ + private typeSourcePath(name: string): string { + if (!this.toildbCodecClasses.has(name)) return ""; + return (this.toildbCodecClasses.get(name)).range.source.internalPath; + } + + /** A `"./.."`-style module specifier from importing file `fromInternal` to target + * module `toInternal` (both extension-less internal paths), e.g. + * `("models/User","migrations/User.migration") -> "../migrations/User.migration"`. */ + private relativeModulePath(fromInternal: string, toInternal: string): string { + let fromParts = fromInternal.split("/"); + fromParts.pop(); // drop the importing file's name, leaving its directory parts + let toParts = toInternal.split("/"); + let i = 0; + while (i < fromParts.length && i + 1 < toParts.length && fromParts[i] == toParts[i]) i++; + let rel = ""; + for (let u = i, uk = fromParts.length; u < uk; ++u) rel += "../"; + if (rel.length == 0) rel = "./"; + for (let t = i, tk = toParts.length; t < tk; ++t) { + rel += toParts[t]; + if (t + 1 < tk) rel += "/"; + } + return rel; + } + + /** Copy the fields a delta-step's old and new layouts SHARE (same name + type + + * array-ness) from `prevVar` into `nextVar`. */ + private migrationCarry( + oldType: string, + newType: string, + prevVar: string, + nextVar: string, + layouts: Map + ): string { + let oldFields = layouts.has(oldType) ? layouts.get(oldType) : new Array(); + let newFields = layouts.has(newType) ? layouts.get(newType) : new Array(); + let carry = ""; + for (let a = 0, an = newFields.length; a < an; ++a) { + let nf = newFields[a]; + for (let b = 0, bn = oldFields.length; b < bn; ++b) { + let of = oldFields[b]; + if (of.name == nf.name && of.typeName == nf.typeName && of.isArray == nf.isArray) { + carry += nextVar + "." + nf.name + "=" + prevVar + "." + nf.name + ";"; + break; + } + } + } + return carry; + } + + // ---- ToilDB @query/@action/... permission check (spec 6) ---- + // + // A static mirror of the edge's `allowed_ops::kind_allows`: a `@query` is + // read-only, only `@derive`/`@job` publish views, etc. The runtime enforces + // this regardless; this turns the common violation into a clear compile error + // instead of a request-time TDL. Best-effort + conservative: it flags only + // direct `Db.collection.method(...)` calls (never an aliased handle) and never + // crashes on an unrecognized node (the runtime gate is the backstop). + + private checkToilDbKinds(): void { + let dbs = new Map>(); + for (let i = 0, k = this.sources.length; i < k; ++i) { + this.collectDbCollections(this.sources[i].statements, dbs); + } + if (!dbs.size) return; + for (let i = 0, k = this.sources.length; i < k; ++i) { + this.checkDbFunctions(this.sources[i].statements, dbs); + } + } + + /** Map every `@database` class (incl. inside namespaces) to its + * collection-name -> handle-family-name. */ + private collectDbCollections(stmts: Statement[], dbs: Map>): void { + for (let i = 0, k = stmts.length; i < k; ++i) { + let s = stmts[i]; + if (s.kind == NodeKind.ClassDeclaration) { + let cls = s; + if (this.hasDecoratorKind(cls.decorators, DecoratorKind.Database)) { + let colls = new Map(); + let members = cls.members; + for (let m = 0, mk = members.length; m < mk; ++m) { + let member = members[m]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (!this.hasDecoratorKind(field.decorators, DecoratorKind.Collection)) continue; + let t = field.type; + if (t == null || !(t instanceof NamedTypeNode)) continue; + colls.set(field.name.text, (t).name.identifier.text); + } + if (colls.size) dbs.set(cls.name.text, colls); + } + } else if (s.kind == NodeKind.NamespaceDeclaration) { + this.collectDbCollections((s).members, dbs); + } + } + } + + /** Check every kind-decorated function (top-level, namespaced, or a method). */ + private checkDbFunctions(stmts: Statement[], dbs: Map>): void { + for (let i = 0, k = stmts.length; i < k; ++i) { + let s = stmts[i]; + if (s.kind == NodeKind.FunctionDeclaration || s.kind == NodeKind.MethodDeclaration) { + let fn = s; + let kind = this.dbFunctionKind(fn.decorators); + let body = fn.body; + if (kind != -1 && body != null) this.walkDbStmt(body, kind, dbs); + } else if (s.kind == NodeKind.NamespaceDeclaration) { + this.checkDbFunctions((s).members, dbs); + } else if (s.kind == NodeKind.ClassDeclaration) { + this.checkDbFunctions((s).members, dbs); + } + } + } + + /** The ToilDB kind decorator on a function, or -1. */ + private dbFunctionKind(decorators: DecoratorNode[] | null): i32 { + if (decorators == null) return -1; + for (let i = 0, k = decorators.length; i < k; ++i) { + let dk = decorators[i].decoratorKind; + if ( + dk == DecoratorKind.Query || dk == DecoratorKind.Action || dk == DecoratorKind.Job || + dk == DecoratorKind.Derive || dk == DecoratorKind.Admin || dk == DecoratorKind.Migrate + ) return dk; + } + return -1; + } + + private walkDbStmt(s: Statement, kind: i32, dbs: Map>): void { + switch (s.kind) { + case NodeKind.Block: { + let stmts = (s).statements; + for (let i = 0, k = stmts.length; i < k; ++i) this.walkDbStmt(stmts[i], kind, dbs); + break; + } + case NodeKind.Expression: this.walkDbExpr((s).expression, kind, dbs); break; + case NodeKind.Return: { let v = (s).value; if (v) this.walkDbExpr(v, kind, dbs); break; } + case NodeKind.Variable: { + let decls = (s).declarations; + for (let i = 0, k = decls.length; i < k; ++i) { + let init = decls[i].initializer; + if (init) this.walkDbExpr(init, kind, dbs); + } + break; + } + case NodeKind.If: { + let st = s; + this.walkDbExpr(st.condition, kind, dbs); + this.walkDbStmt(st.ifTrue, kind, dbs); + if (st.ifFalse) this.walkDbStmt(st.ifFalse, kind, dbs); + break; + } + case NodeKind.For: { + let st = s; + if (st.initializer) this.walkDbStmt(st.initializer, kind, dbs); + if (st.condition) this.walkDbExpr(st.condition, kind, dbs); + if (st.incrementor) this.walkDbExpr(st.incrementor, kind, dbs); + this.walkDbStmt(st.body, kind, dbs); + break; + } + case NodeKind.ForOf: { + let st = s; + this.walkDbExpr(st.iterable, kind, dbs); + this.walkDbStmt(st.body, kind, dbs); + break; + } + case NodeKind.While: { + let st = s; + this.walkDbExpr(st.condition, kind, dbs); + this.walkDbStmt(st.body, kind, dbs); + break; + } + case NodeKind.Do: { + let st = s; + this.walkDbStmt(st.body, kind, dbs); + this.walkDbExpr(st.condition, kind, dbs); + break; + } + case NodeKind.Switch: { + let st = s; + this.walkDbExpr(st.condition, kind, dbs); + let cases = st.cases; + for (let i = 0, k = cases.length; i < k; ++i) { + let cs = cases[i].statements; + for (let j = 0, jk = cs.length; j < jk; ++j) this.walkDbStmt(cs[j], kind, dbs); + } + break; + } + case NodeKind.Throw: this.walkDbExpr((s).value, kind, dbs); break; + case NodeKind.Try: { + let st = s; + this.walkDbStmtList(st.bodyStatements, kind, dbs); + if (st.catchStatements) this.walkDbStmtList(st.catchStatements, kind, dbs); + if (st.finallyStatements) this.walkDbStmtList(st.finallyStatements, kind, dbs); + break; + } + default: break; + } + } + + private walkDbStmtList(stmts: Statement[], kind: i32, dbs: Map>): void { + for (let i = 0, k = stmts.length; i < k; ++i) this.walkDbStmt(stmts[i], kind, dbs); + } + + private walkDbExpr(e: Expression, kind: i32, dbs: Map>): void { + switch (e.kind) { + case NodeKind.Call: { + let call = e; + this.checkDbCall(call, kind, dbs); + this.walkDbExpr(call.expression, kind, dbs); + let args = call.args; + for (let i = 0, k = args.length; i < k; ++i) this.walkDbExpr(args[i], kind, dbs); + break; + } + case NodeKind.New: { + let args = (e).args; + for (let i = 0, k = args.length; i < k; ++i) this.walkDbExpr(args[i], kind, dbs); + break; + } + case NodeKind.PropertyAccess: this.walkDbExpr((e).expression, kind, dbs); break; + case NodeKind.ElementAccess: { + let ea = e; + this.walkDbExpr(ea.expression, kind, dbs); + this.walkDbExpr(ea.elementExpression, kind, dbs); + break; + } + case NodeKind.Binary: { + let b = e; + this.walkDbExpr(b.left, kind, dbs); + this.walkDbExpr(b.right, kind, dbs); + break; + } + case NodeKind.UnaryPrefix: this.walkDbExpr((e).operand, kind, dbs); break; + case NodeKind.UnaryPostfix: this.walkDbExpr((e).operand, kind, dbs); break; + case NodeKind.Parenthesized: this.walkDbExpr((e).expression, kind, dbs); break; + case NodeKind.Assertion: this.walkDbExpr((e).expression, kind, dbs); break; + case NodeKind.InstanceOf: this.walkDbExpr((e).expression, kind, dbs); break; + case NodeKind.Ternary: { + let t = e; + this.walkDbExpr(t.condition, kind, dbs); + this.walkDbExpr(t.ifThen, kind, dbs); + this.walkDbExpr(t.ifElse, kind, dbs); + break; + } + case NodeKind.Comma: { + let exprs = (e).expressions; + for (let i = 0, k = exprs.length; i < k; ++i) this.walkDbExpr(exprs[i], kind, dbs); + break; + } + default: break; + } + } + + /** If `call` is a direct `Db.collection.method(...)`, verify the kind permits + * it. The receiver must be exactly `Identifier.Identifier` naming a known + * `@database` + collection (an aliased handle is left to the runtime). */ + private checkDbCall(call: CallExpression, kind: i32, dbs: Map>): void { + let callee = call.expression; + if (callee.kind != NodeKind.PropertyAccess) return; + let methodAccess = callee; + let recv = methodAccess.expression; + if (recv.kind != NodeKind.PropertyAccess) return; + let collAccess = recv; + let dbExpr = collAccess.expression; + if (dbExpr.kind != NodeKind.Identifier) return; + let colls = dbs.get((dbExpr).text); + if (colls == null) return; + let family = colls.get(collAccess.property.text); + if (family == null) return; + let method = methodAccess.property.text; + let op = dbOpOf(family, method); + if (op.length == 0) return; // unknown method: the type checker handles it + if (!dbKindAllows(kind, op)) { + this.error( + DiagnosticCode.User_defined_0, + methodAccess.property.range, + "ToilDB: a @" + dbKindName(kind) + " function may not call '." + method + "' on '" + + (dbExpr).text + "." + collAccess.property.text + "' (" + dbKindReason(kind) + ")" + ); + } } // types @@ -1852,9 +2576,684 @@ export class Parser extends DiagnosticEmitter { } declaration.range.end = tn.pos; declaration.overriddenModuleName = this.currentModuleName; + if (!isInterface && decorators != null) { + for (let i = 0, k = decorators.length; i < k; ++i) { + let dk = decorators[i].decoratorKind; + if (dk == DecoratorKind.Data) { + this.injectDataCodec(declaration); + } else if (dk == DecoratorKind.User) { + // `@user` IS a `@data` class (same binary codec) plus the typed + // `AuthService.getUser()` bridge. + this.injectDataCodec(declaration); + this.injectUserBinding(declaration); + } else if (dk == DecoratorKind.Rest) { + this.injectRestController(declaration, decorators[i]); + } else if (dk == DecoratorKind.Database) { + this.injectDatabaseBinding(declaration); + } else if (dk == DecoratorKind.Daemon) { + this.injectDaemonHandler(declaration); + } + } + } return declaration; } + /** + * Synthesize the ToilDB `@database` binding: for each `@collection` field + * (typed as a `Documents`/... handle), add a STATIC handle to the class + * initialized once at module init via `__toildbResolve("/")`. + * The class name is used as the value: `App.users.get(...)` reads the static + * handle. The instance field stays as the type carrier (vestigial). + */ + private injectDatabaseBinding(declaration: ClassDeclaration): void { + let dbName = declaration.name.text; + let members = declaration.members; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (!this.hasDecoratorKind(field.decorators, DecoratorKind.Collection)) continue; + let typeNode = field.type; + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) continue; + let named = typeNode; + // A `@collection static coll!: T` field type-checks as a STATIC member in + // stock TypeScript, so `Db.coll` resolves in editors with NO plugin (and + // `tsc` stays clean). But the static getter injected below would then + // collide with it (TS2718), and a static field needs an initializer (AS238). + // Demote it to an INSTANCE field: harmless and vestigial (the class is only + // ever used statically), exactly like the legacy `@collection coll!: T` + // form, and still seen by the `@collection` scanners (the catalog section + + // the function-kind checks), which do not care whether the field is static. + if (field.is(CommonFlags.Static)) field.flags &= ~CommonFlags.Static; + let handleName = named.name.identifier.text; + let collName = field.name.text; + let typeArgs = named.typeArguments; + let typeText = handleName; + if (typeArgs != null && typeArgs.length > 0) { + let parts = ""; + for (let a = 0, n = typeArgs.length; a < n; ++a) { + if (a > 0) parts += ", "; + let ta = typeArgs[a]; + if (ta instanceof NamedTypeNode) parts += (ta).name.identifier.text; + } + typeText = handleName + "<" + parts + ">"; + } + let resKey = dbName + "/" + collName; + // Resolve the handle LAZILY on first access, not in a static initializer. + // A static initializer runs in the module `~start` (at instantiation), + // before the host has bound the request's linear memory, so calling the + // `resolve_collection` host import there traps. A cached static getter + // defers the one resolve to the first `Db.coll` use within a request (when + // memory is bound); pooled instances keep the resolved handle. + let slot = "__db_" + collName; + this.injectClassMember(declaration, + "private static " + slot + ": " + typeText + " | null = null;"); + this.injectClassMember(declaration, + "static get " + collName + "(): " + typeText + " { if (" + dbName + "." + slot + + " == null) " + dbName + "." + slot + " = new " + typeText + + "(__toildbResolve(\"" + resKey + "\")); return " + dbName + "." + slot + "!; }"); + } + // Make the resolve helper available to the synthesized getters. + this.injectTopLevelStatements(declaration, + "// @ts-ignore: injected\nimport { __toildbResolve } from \"toildb\";\n"); + } + + /** Synthesize and append the binary codec members to a `@data` class. */ + private injectDataCodec(declaration: ClassDeclaration): void { + let className = declaration.name.text; + let members = declaration.members; + let writes = ""; + let reads = ""; + let jsonWrites = ""; + let jsonReads = ""; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (field.is(CommonFlags.Static)) continue; + let typeNode = field.type; + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) continue; + let fieldName = field.name.text; + let key = "\"" + fieldName + "\""; + let namedType = typeNode; + let typeName = namedType.name.identifier.text; + let typeArgs = namedType.typeArguments; + if (typeName == "Array" && typeArgs != null && typeArgs.length == 1 && typeArgs[0] instanceof NamedTypeNode) { + // Length-prefixed array of scalars or nested @data. + let elemName = (typeArgs[0]).name.identifier.text; + let a = "__a" + i.toString(); + let c = "__c" + i.toString(); + let j = "__j" + i.toString(); + writes += "{const " + a + "=this." + fieldName + ";__w.writeU32(" + a + ".length);for(let " + j + "=0," + c + "=" + a + ".length;" + j + "<" + c + ";++" + j + "){" + dataWriteStmt(elemName, a + "[" + j + "]") + "}}"; + reads += "{const " + c + "=__r.readU32();const " + a + "=new Array<" + elemName + ">();for(let " + j + ":u32=0;" + j + "<" + c + "&&__r.ok;++" + j + "){" + a + ".push(" + dataReadExpr(elemName) + ");}__o." + fieldName + "=" + a + ";}"; + jsonWrites += "{const " + a + "=this." + fieldName + ";const " + a + "j=JSON.arr();for(let " + j + "=0," + c + "=" + a + ".length;" + j + "<" + c + ";++" + j + "){" + a + "j.push(" + jsonOfExpr(elemName, a + "[" + j + "]") + ");}__j.set(" + key + "," + a + "j);}"; + jsonReads += "{const " + a + "v=__v.get(" + key + ");const " + a + "=new Array<" + elemName + ">();for(let " + j + "=0," + c + "=" + a + "v.length();" + j + "<" + c + ";++" + j + "){" + a + ".push(" + jsonReadExpr(elemName, a + "v.at(" + j + ")") + ");}__o." + fieldName + "=" + a + ";}"; + } else if (typeName == "Uint8Array") { + // Raw bytes: length-prefixed in the binary codec (writeBytes/readBytes); + // a number array in the JSON view (exact round-trip, no encoding choice). + let a = "__a" + i.toString(); + let c = "__c" + i.toString(); + let j = "__j" + i.toString(); + writes += "__w.writeBytes(this." + fieldName + ");"; + reads += "__o." + fieldName + "=__r.readBytes();"; + jsonWrites += "{const " + a + "=this." + fieldName + ";const " + a + "j=JSON.arr();for(let " + j + ":i32=0," + c + "=" + a + ".length;" + j + "<" + c + ";++" + j + "){" + a + "j.push(JSON.of(" + a + "[" + j + "]));}__j.set(" + key + "," + a + "j);}"; + jsonReads += "{const " + a + "v=__v.get(" + key + ");const " + a + "=new Uint8Array(" + a + "v.length());for(let " + j + ":i32=0," + c + "=" + a + "v.length();" + j + "<" + c + ";++" + j + "){" + a + "[" + j + "]=" + a + "v.at(" + j + ").asU64();}__o." + fieldName + "=" + a + ";}"; + } else { + // Scalar, string, bignum, or a nested @data type. + writes += dataWriteStmt(typeName, "this." + fieldName); + reads += "__o." + fieldName + "=" + dataReadExpr(typeName) + ";"; + jsonWrites += "__j.set(" + key + "," + jsonOfExpr(typeName, "this." + fieldName) + ");"; + jsonReads += "__o." + fieldName + "=" + jsonReadExpr(typeName, "__v.get(" + key + ")") + ";"; + } + } + let typeId = dataTypeId(className).toString(); + // Binary codec: the *Into/*From pair carries tagless recursion; encode/decode + // own the message-boundary typeId. + this.injectClassMember(declaration, "encodeInto(__w: DataWriter): void{" + writes + "}"); + this.injectClassMember(declaration, "encode(): Uint8Array{const __w=new DataWriter();__w.writeU32(" + typeId + ");this.encodeInto(__w);return __w.toBytes();}"); + this.injectClassMember(declaration, "static decodeFrom(__r: DataReader): " + className + "{const __o=new " + className + "();" + reads + "return __o;}"); + this.injectClassMember(declaration, "static decode(__buf: Uint8Array): " + className + "{const __r=new DataReader(__buf);__r.readU32();return " + className + ".decodeFrom(__r);}"); + // Instance decode, the mirror of `encode()`: reads a full message into `this`. + // Needed because AssemblyScript can't call a static (`V.decode`) through a + // type parameter, but an instance method resolves fine; the ToilDB generic + // handles (`std/assembly/toildb.ts`) use it via `instantiate()`. + // `decodeIntoVersioned(buf, version)` is the one the multi-value reads (getMany + // /latest/membershipList) call with the PER-ITEM stored schema_version so a + // `@migrate` dispatch fires for each item; `decodeInto(buf)` is the single-value + // path (get/view_get) and passes -1 (no migration) by default. A `@migrate`d + // type's weave overrides both (see weaveDecodeInto). + let decodeBody = "const __r=new DataReader(__buf);__r.readU32();" + reads.replace(/__o\./g, "this."); + this.injectClassMember(declaration, "decodeIntoVersioned(__buf: Uint8Array, __v: i64): void{" + decodeBody + "}"); + this.injectClassMember(declaration, "decodeInto(__buf: Uint8Array): void{this.decodeIntoVersioned(__buf, -1);}"); + // Capture the field reads + the declaration so `finish()` can rebuild + // `decodeInto` with a `@migrate` version-dispatch prefix once the whole + // program (incl. later-parsed `@migrate` functions) is known. + this.toildbCodecReads.set(className, reads); + this.toildbCodecClasses.set(className, declaration); + this.injectClassMember(declaration, "static dataId(): u32{return " + typeId + ";}"); + // JSON view, independent of the binary path. + this.injectClassMember(declaration, "toJSON(): JSON{const __j=JSON.obj();" + jsonWrites + "return __j;}"); + this.injectClassMember(declaration, "static fromJSON(__v: JSON): " + className + "{const __o=new " + className + "();" + jsonReads + "return __o;}"); + } + + /** Parse a synthesized member from source text and append it to the class. */ + private injectClassMember(declaration: ClassDeclaration, source: string): void { + // Reuse the class file's path so synthesized nodes resolve to a registered + // source (the compiler looks the enclosing file up by internalPath). + let userSource = declaration.range.source; + let synthetic = new Source(userSource.sourceKind, userSource.normalizedPath, source); + let tn = new Tokenizer(synthetic, this.diagnostics); + let member = this.parseClassMember(tn, declaration); + if (member != null && member instanceof DeclarationStatement) { + declaration.members.push(member); + } + } + + /** Parse synthesized top-level statements and append them to the class's source. */ + private injectTopLevelStatements(declaration: ClassDeclaration, text: string): void { + // Run through the real parse path so an injected `import` registers its + // dependency against `currentSource` (the controller file) and the backlog. + let userSource = declaration.range.source; + let synthetic = new Source(userSource.sourceKind, userSource.normalizedPath, text); + let tn = new Tokenizer(synthetic, this.diagnostics); + while (!tn.skip(Token.EndOfFile)) { + let stmt = this.parseTopLevelStatement(tn, null); + if (stmt != null) { + userSource.statements.push(stmt); + } else { + this.skipStatement(tn); + break; + } + } + } + + /** + * Synthesize the HTTP dispatcher for a `@rest` controller: a `__tryRoute` + * method that, per `@route`/`@get`/... method, matches the HTTP method + the + * prefix-joined path (capturing `:params`), decodes the `@data` body for the + * route's stream, invokes the handler, and encodes the `@data` (or `Response`) + * return; plus a module-level self-registration into the runtime `Rest` router. + */ + private injectRestController(declaration: ClassDeclaration, restDecorator: DecoratorNode): void { + let className = declaration.name.text; + let members = declaration.members; + let prefix = this.restPrefixOf(restDecorator); + let classStream = this.restStreamOf(restDecorator); + // `@auth` on the controller class guards EVERY route in it. + let classAuth = this.hasDecoratorKind(declaration.decorators, DecoratorKind.Auth); + + let blocks = ""; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + let routeDeco = this.routeDecoratorOf(method); + if (routeDeco == null) continue; + let block = this.buildRouteBlock(prefix, classStream, method, routeDeco, classAuth); + if (block != null) blocks += block; + } + if (blocks.length == 0) return; // no routes -> nothing to wire + + // Per-controller matcher. `Request`/`Response`/`matchRoute` arrive via the + // aliased runtime import below, so the controller file needn't import them. + this.injectClassMember(declaration, + "__tryRoute(__req: __toilReq): __toilResp | null{" + blocks + "return null;}"); + + let runtime = this.restRuntimePath(declaration); + let userSource = declaration.range.source; + let key = userSource.normalizedPath; + if (!this.restImportedSources.has(key)) { + this.restImportedSources.add(key); + this.injectTopLevelStatements(declaration, + "import { Rest as __toilRest, Request as __toilReq, Response as __toilResp, matchRoute as __toilMatch } from " + + JSON.stringify(runtime) + ";\n"); + } + this.injectTopLevelStatements(declaration, + "__toilRest.register((__q: __toilReq): __toilResp | null => new " + className + "().__tryRoute(__q));\n"); + } + + /** + * Synthesize the cold-artifact daemon entry for a `@daemon` class (spec 03 + * sections 5.2 / 5.6 / 5.7, Reconciliation Part 2 cold exports). Mirrors + * `injectRestController`: it scans the class methods once (same source-order + * walk the `toildaemon.catalog` builder uses, so `task_index` <-> dispatch + * index stay in lockstep), synthesizes a `__tick(task)` dispatcher onto the + * class, and emits the two canonical cold module-level exports: + * + * `daemon_start(): i32` - runs once at cold-box boot; instantiates the + * `@daemon` class, holds the single box-lifetime + * instance, runs the optional `onStart()`, and + * returns 0 (negative = Part 3 error bridge). + * `scheduled_tick(task_id: i32): i64` - dispatches `instance.__tick(task_id)` + * by switching on the catalog `task_index`; + * returns 0 (negative = Part 3 error bridge). + * + * Unlike `injectRestController`, the exports are self-contained (they do NOT + * route through an external runtime `Daemon` registry import). The injected + * `register(...)` in `injectRestController` is pruned when nothing reachable + * references it, but a top-level EXPORT that referenced an unresolved runtime + * import would be a hard compile error (TS6054), so the host-called exports + * are synthesized as plain top-level `export function`s and keep the one + * box-lifetime instance in a module-level singleton (doc 03 D1 / section 2: + * per-domain state lives in instance fields for the box lifetime). + * + * Fires diagnostic 9012 for a `@scheduled` method with a non-empty parameter + * list or a non-void return type, and the 9008 warning for a `@daemon` class + * with zero `@scheduled` tasks (a daemon may legitimately run only `onStart`). + */ + private injectDaemonHandler(declaration: ClassDeclaration): void { + let className = declaration.name.text; + let members = declaration.members; + + // Collect the `@scheduled` task method names in SOURCE DECLARATION ORDER, + // applying exactly the same filter the `toildaemon.catalog` builder uses + // (method member that carries `@scheduled`), so the i-th task here gets the + // same `task_index = i` the catalog emits. The catalog additionally skips a + // task whose spec is missing/unparseable, but those are HARD ERRORS (9010 / + // 9011) so no artifact is produced when they diverge; on any successful + // compile the two filters select the identical set in the identical order. + let dispatchArms = ""; + let scheduledCount = 0; + let hasOnStart = false; + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + let methodName = method.name.text; + if (methodName == "onStart" && !this.hasDecoratorKind(method.decorators, DecoratorKind.Scheduled)) { + hasOnStart = true; + } + if (!this.hasDecoratorKind(method.decorators, DecoratorKind.Scheduled)) continue; + // 9012: a `@scheduled` handler takes no arguments and returns void (spec + // 03 section 3.5 / 4.5). A non-empty parameter list or a non-`void` return + // is rejected; the method is still added to the dispatcher so a single + // diagnostic per offending handler is emitted (the compile fails anyway). + if (!this.isVoidNoArgSignature(method.signature)) { + this.error( + DiagnosticCode.Scheduled_handler_0_must_take_no_arguments_and_return_void, + method.signature.range, methodName + ); + } + let taskIndex = scheduledCount; + dispatchArms += (taskIndex == 0 ? "if" : "else if") + + " (__task == " + taskIndex.toString() + ") this." + methodName + "();"; + ++scheduledCount; + } + + // 9008: a `@daemon` with zero `@scheduled` tasks is a WARNING, not an error + // (a daemon may run only a long-lived `onStart` loop; spec 03 section 4.5). + if (scheduledCount == 0) { + this.warning( + DiagnosticCode.Daemon_class_0_declares_no_scheduled_tasks, + declaration.name.range, className + ); + } + + // Synthesize the per-task tick dispatcher onto the class. `task` indices are + // assigned in `@scheduled` source-declaration order and MUST equal the + // per-task `task_index` of `toildaemon.catalog` (section 7), so the host's + // `scheduled_tick(task_id)` maps the catalog index 1:1 onto `__tick`. + this.injectClassMember(declaration, + "__tick(__task: i32): void{" + dispatchArms + "}"); + + // The two canonical cold module-level exports (Reconciliation Part 2). They + // are self-contained (no external runtime import) and share the one + // box-lifetime instance via a module-level singleton. `onStart()` is invoked + // only when the class declares it (it is a convention method, not decorated). + let instVar = "__toilDaemonInstance"; + let onStartCall = hasOnStart ? "__inst.onStart();" : ""; + this.injectTopLevelStatements(declaration, + "// @ts-ignore: injected daemon entry (spec 03 section 5.2)\n" + + "let " + instVar + ": " + className + " | null = null;\n"); + this.injectTopLevelStatements(declaration, + "export function daemon_start(): i32{" + + "let __inst = new " + className + "();" + instVar + " = __inst;" + + onStartCall + "return 0;}\n"); + this.injectTopLevelStatements(declaration, + "export function scheduled_tick(__task_id: i32): i64{" + + "let __inst = " + instVar + ";" + + "if (__inst == null){__inst = new " + className + "();" + instVar + " = __inst;}" + + "__inst.__tick(__task_id);return 0;}\n"); + } + + /** True if a function signature takes no parameters and returns `void` (the + * required `@scheduled` handler shape, spec 03 section 3.5). A missing or + * non-`void`-named return type, or any parameter, is false. */ + private isVoidNoArgSignature(signature: FunctionTypeNode): bool { + if (signature.parameters.length != 0) return false; + let returnType = signature.returnType; + if (!(returnType instanceof NamedTypeNode)) return false; + let named = returnType; + if (named.isNullable) return false; + return named.name.identifier.text == "void"; + } + + /** + * Bind a `@user` class to `AuthService.getUser()` typing. The lib declares + * `getUser(): AuthUser | null`; here we inject a `@global` `AuthUser` that + * extends the user's class, so `AuthService.getUser()` is auto-typed with the + * user's fields and NO type argument. `AuthUser` is a no-field subclass, so + * the decode bridge's `changetype` is an identity. There is exactly one + * authenticated-user type per program; a second `@user` produces a duplicate + * `AuthUser` (a natural compile error). + */ + private injectUserBinding(declaration: ClassDeclaration): void { + let className = declaration.name.text; + this.injectTopLevelStatements(declaration, + "// @ts-ignore: injected\n@global class AuthUser extends " + className + " {}\n"); + this.injectTopLevelStatements(declaration, + "// @ts-ignore: injected\n@global function __toilDecodeAuthUser(__b: Uint8Array): AuthUser { return changetype(" + + className + ".decode(__b)); }\n"); + } + + /** True if `decorators` carries a decorator of `kind` (e.g. `@auth`). */ + private hasDecoratorKind(decorators: DecoratorNode[] | null, kind: DecoratorKind): bool { + if (decorators == null) return false; + for (let i = 0, k = decorators.length; i < k; ++i) { + if (decorators[i].decoratorKind == kind) return true; + } + return false; + } + + /** The mount prefix from `@rest("api")` -> "/api"; "" for the bare/object form (root). */ + private restPrefixOf(deco: DecoratorNode): string { + let args = deco.args; + if (args == null || args.length == 0) return ""; + let a = args[0]; + if (a instanceof StringLiteralExpression) { + let s = (a).value.trim(); + if (s.length == 0 || s == "/") return ""; + if (!s.startsWith("/")) s = "/" + s; + return s.replace(/\/+$/, ""); + } + return ""; + } + + /** The class-default stream from `@rest({ stream: DataStream.Binary })`, else "JSON". */ + private restStreamOf(deco: DecoratorNode): string { + let args = deco.args; + if (args != null && args.length > 0 && args[0] instanceof ObjectLiteralExpression) { + let v = this.objectField(args[0], "stream"); + if (v != null) { + let s = this.enumMember(v); + if (s != null) return s; + } + } + return "JSON"; + } + + /** The `@route`/`@get`/... decorator on a method, or null if it isn't a route. */ + private routeDecoratorOf(method: MethodDeclaration): DecoratorNode | null { + let decos = method.decorators; + if (decos == null) return null; + for (let i = 0, k = decos.length; i < k; ++i) { + switch (decos[i].decoratorKind) { + case DecoratorKind.Route: + case DecoratorKind.Get: + case DecoratorKind.Post: + case DecoratorKind.Put: + case DecoratorKind.Delete: + case DecoratorKind.Patch: + case DecoratorKind.Head: + case DecoratorKind.Options: return decos[i]; + } + } + return null; + } + + /** Generate one `if (method && path-match) { decode; call; encode }` route block. */ + private buildRouteBlock(prefix: string, classStream: string, method: MethodDeclaration, deco: DecoratorNode, classAuth: bool): string | null { + let dk = deco.decoratorKind; + let httpMethod: string; + let routePath: string; + let stream = classStream; + + if (dk == DecoratorKind.Route) { + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof ObjectLiteralExpression)) return null; + let obj = args[0]; + let mv = this.objectField(obj, "method"); + let pv = this.objectField(obj, "path"); + if (mv == null || pv == null || !(pv instanceof StringLiteralExpression)) return null; + let mName = this.enumMember(mv); + if (mName == null) return null; + httpMethod = mName; + routePath = (pv).value; + let sv = this.objectField(obj, "stream"); + if (sv != null) { + let s = this.enumMember(sv); + if (s != null) stream = s; + } + } else { + httpMethod = this.verbName(dk); + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof StringLiteralExpression)) return null; + routePath = (args[0]).value; + } + + let methodValue = this.methodEnumValue(httpMethod); + if (methodValue < 0) return null; + let fullPath = this.joinPath(prefix, routePath); + + // Classify parameters: a `RouteContext` param receives `__ctx`, anything else + // is treated as the `@data` request body and receives `__body`. + let params = method.signature.parameters; + let bodyType: string | null = null; + let callArgs = ""; + for (let i = 0, k = params.length; i < k; ++i) { + let tn = params[i].type; + let typeName = (tn instanceof NamedTypeNode) ? (tn).name.identifier.text : ""; + if (i > 0) callArgs += ","; + if (typeName == "RouteContext") { + callArgs += "__ctx"; + } else { + bodyType = typeName; + callArgs += "__body"; + } + } + + let rt = method.signature.returnType; + let retName = (rt instanceof NamedTypeNode) ? (rt).name.identifier.text : ""; + let call = "this." + method.name.text + "(" + callArgs + ")"; + + // `@cache(edgeMinutes[, browserSeconds[, privateScope[, allowAuth]]])` + // -> a `.cache(...)` suffix on whatever `Response` this route returns. + // `.cache()` returns the same Response, so it composes with every shape. + let cacheSuffix = this.cacheSuffixOf(method); + + let s = "if(__req.method==" + methodValue.toString() + "){"; + s += "const __ctx=__toilMatch(" + JSON.stringify(fullPath) + ",__req);"; + s += "if(__ctx!=null){"; + // `@ratelimit(strategy, limit, window)`: reject (429 + Retry-After) before + // any other work, so it shields the auth/body path from a flood and rate- + // limits unauthenticated brute-force too. Keyed host-side by the unspoofable + // peer IP. Runs before the `@auth` guard. + s += this.ratelimitGuardOf(method); + // `@auth` (on the route or the controller): reject before the handler runs + // when there is no valid session. `AuthService` is an ambient global; it + // reads the current request's session cookie. The handler then calls + // `AuthService.getUser()` for the typed user. + if (classAuth || this.hasDecoratorKind(method.decorators, DecoratorKind.Auth)) { + s += "if(!AuthService.hasSession()){return __toilResp.text(\"unauthorized\\n\",401);}"; + } + if (bodyType != null) { + if (stream == "Binary") { + s += "const __body=" + bodyType + ".decode(__req.body);"; + } else { + s += "const __body=" + bodyType + ".fromJSON(JSON.parse(__ctx.text()));"; + } + } + if (retName == "Response" || retName == "__toilResp") { + s += "return " + call + cacheSuffix + ";"; + } else if (retName == "void") { + s += call + ";return __toilResp.empty(204)" + cacheSuffix + ";"; + } else if (stream == "Binary") { + s += "const __res=" + call + ";return __toilResp.bytes(__res.encode())" + cacheSuffix + ";"; + } else { + s += "const __res=" + call + ";return __toilResp.json(__res.toJSON().toString())" + cacheSuffix + ";"; + } + s += "}}"; + return s; + } + + /** + * The `.cache(...)` suffix to append to a route's `Response` when the + * handler method carries `@cache(...)`, else `""`. Only integer and + * boolean literal arguments are accepted (the parameters of + * `Response.cache(edgeTtlMinutes, browserTtlSeconds?, privateScope?, + * allowAuth?)`); any other argument shape yields `""` so a malformed + * decorator degrades to "not cached" rather than miscompiling. Each arg + * is emitted from its verbatim source text. + */ + private cacheSuffixOf(method: MethodDeclaration): string { + let decos = method.decorators; + if (decos == null) return ""; + for (let i = 0, k = decos.length; i < k; ++i) { + if (decos[i].decoratorKind != DecoratorKind.Cache) continue; + let args = decos[i].args; + if (args == null || args.length == 0) return ""; + let parts = ""; + for (let j = 0, n = args.length; j < n; ++j) { + let a = args[j]; + let ok = (a instanceof IntegerLiteralExpression) + || a.kind == NodeKind.True + || a.kind == NodeKind.False; + if (!ok) return ""; // non-literal arg -> fail safe (no cache) + if (j > 0) parts += ","; + parts += a.range.toString(); + } + return ".cache(" + parts + ")"; + } + return ""; + } + + /** + * The rate-limit guard to prepend to a route block when the handler carries + * `@ratelimit(strategy, limit, window)`, else `""`. `strategy` is a member of + * the `RateLimit` enum (`FixedWindow`/`SlidingWindow`/`TokenBucket`) or a bare + * integer tag; `limit` and `window` must be integer literals (mirrors + * `@cache`). Lowers to a single ambient `RateLimitService.guard(...)` call that + * returns a `429` `Response` when over the limit, or `null` to proceed. A + * malformed decorator yields `""` (no guard) rather than miscompiling. + */ + private ratelimitGuardOf(method: MethodDeclaration): string { + let decos = method.decorators; + if (decos == null) return ""; + for (let i = 0, k = decos.length; i < k; ++i) { + if (decos[i].decoratorKind != DecoratorKind.Ratelimit) continue; + let args = decos[i].args; + if (args == null || args.length < 3) return ""; // need (strategy, limit, window) + let tag = this.ratelimitStrategyTag(args[0]); + if (tag.length == 0) return ""; // unrecognized strategy -> no guard + let limit = args[1]; + let window = args[2]; + if (!(limit instanceof IntegerLiteralExpression) || !(window instanceof IntegerLiteralExpression)) { + return ""; // non-literal limit/window -> fail safe (no guard) + } + let routeId = this.ratelimitRouteCounter++; + return "{const __rl=RateLimitService.guard(" + routeId.toString() + "," + tag + "," + + limit.range.toString() + "," + window.range.toString() + ");if(__rl!=null){return __rl;}}"; + } + return ""; + } + + /** + * The integer strategy tag to emit for a `@ratelimit` strategy argument: + * `RateLimit.SlidingWindow` -> "1", `RateLimit.TokenBucket` -> "2", any other + * member (incl. `FixedWindow`) -> "0", an explicit integer literal passes + * through verbatim (the host clamps an unknown tag to FixedWindow). Returns + * "" when the argument is neither, so the caller emits no guard. + */ + private ratelimitStrategyTag(arg: Expression): string { + if (arg instanceof IntegerLiteralExpression) return arg.range.toString(); + if (arg instanceof PropertyAccessExpression) { + let p = (arg).property.text; + if (p == "SlidingWindow") return "1"; + if (p == "TokenBucket") return "2"; + return "0"; // FixedWindow or any unknown member -> cheapest always-on default + } + return ""; + } + + /** Find an object-literal field value by name, or null. */ + private objectField(obj: ObjectLiteralExpression, name: string): Expression | null { + let names = obj.names; + for (let i = 0, k = names.length; i < k; ++i) { + if (names[i].text == name) return obj.values[i]; + } + return null; + } + + /** The member of an enum access expression (`Methods.GET` -> "GET"), or null. */ + private enumMember(expr: Expression): string | null { + if (expr instanceof PropertyAccessExpression) { + return (expr).property.text; + } + return null; + } + + /** The HTTP method name carried by a verb decorator kind. */ + private verbName(dk: DecoratorKind): string { + switch (dk) { + case DecoratorKind.Post: return "POST"; + case DecoratorKind.Put: return "PUT"; + case DecoratorKind.Delete: return "DELETE"; + case DecoratorKind.Patch: return "PATCH"; + case DecoratorKind.Head: return "HEAD"; + case DecoratorKind.Options: return "OPTIONS"; + default: return "GET"; + } + } + + /** The runtime `Method` enum value for an HTTP method name, or -1 if unknown. */ + private methodEnumValue(name: string): i32 { + switch (name) { + case "GET": return 0; + case "POST": return 1; + case "PUT": return 2; + case "DELETE": return 3; + case "PATCH": return 4; + case "HEAD": return 5; + case "OPTIONS": return 6; + default: return -1; + } + } + + /** Join a mount prefix and a route path into the matcher pattern. */ + private joinPath(prefix: string, routePath: string): string { + let r = routePath.trim(); + if (r.length == 0) r = "/"; + if (!r.startsWith("/")) r = "/" + r; + if (r == "/") return prefix.length > 0 ? prefix : "/"; + if (r.length > 1) r = r.replace(/\/+$/, ""); + let full = prefix + r; + return full.length == 0 ? "/" : full; + } + + /** + * The module specifier to import the REST runtime from: reuse whatever path + * this controller already imports a runtime symbol from, else the default. + */ + private restRuntimePath(declaration: ClassDeclaration): string { + let stmts = declaration.range.source.statements; + for (let i = 0, k = stmts.length; i < k; ++i) { + let st = stmts[i]; + if (st.kind != NodeKind.Import) continue; + let imp = st; + let decls = imp.declarations; + if (decls == null) continue; + for (let j = 0, n = decls.length; j < n; ++j) { + let name = decls[j].foreignName.text; + if (name == "Response" || name == "Request" || name == "RouteContext" || + name == "ToilHandler" || name == "Method" || name == "Header" || + name == "Server" || name == "Rest") { + return imp.path.value; + } + } + } + return "toiljs/server/runtime"; + } + parseClassExpression(tn: Tokenizer): ClassExpression | null { // at 'class': Identifier? '{' ... '}' diff --git a/src/passes/shadowstack.ts b/src/passes/shadowstack.ts index d34997ed08..57d0b91041 100644 --- a/src/passes/shadowstack.ts +++ b/src/passes/shadowstack.ts @@ -109,6 +109,8 @@ import { _BinaryenFunctionSetBody, _BinaryenGetExport, _BinaryenGetFunction, + _BinaryenGetFunctionByIndex, + _BinaryenGetNumFunctions, _BinaryenLocalSetGetIndex, _BinaryenLocalSetGetValue, _BinaryenLocalSetIsTee, @@ -322,7 +324,7 @@ export class ShadowStackPass extends Pass { /** Makes a check that the current stack pointer is valid. */ makeStackCheck(): ExpressionRef { let module = this.module; - if (!this.hasStackCheckFunction) { + if (!this.hasStackCheckFunction && !module.hasFunction("~stack_check")) { this.hasStackCheckFunction = true; module.addFunction("~stack_check", TypeRef.None, TypeRef.None, null, module.if( @@ -330,10 +332,12 @@ export class ShadowStackPass extends Pass { module.global_get(BuiltinNames.stack_pointer, this.ptrType), module.global_get(BuiltinNames.data_end, this.ptrType) ), - this.compiler.makeStaticAbort( - this.compiler.ensureStaticString("stack overflow"), - Source.native - ) + this.compiler.options.hasFeature(Feature.ExceptionHandling) + ? module.unreachable() + : this.compiler.makeStaticAbort( + this.compiler.ensureStaticString("stack overflow"), + Source.native + ) ) ); } @@ -573,72 +577,98 @@ export class ShadowStackPass extends Pass { /** @override */ walkModule(): void { - // Run the pass normally - super.walkModule(); - - // Instrument returns in functions utilizing stack slots + // Walk functions in a loop until no new functions are added. + // This is necessary because transforming __tostack calls and instrumenting + // functions may trigger compilation of new functions (e.g., via makeStackCheck -> makeStaticAbort). + let moduleRef = this.module.ref; let module = this.module; - let instrumentReturns = new InstrumentReturns(this); - for (let _keys = Map_keys(this.slotMaps), i = 0, k = _keys.length; i < k; ++i) { - let func = _keys[i]; - let slotMap = changetype(this.slotMaps.get(func)); - let frameSize = slotMap.size * this.ptrSize; + let lastNumFunctions: Index = 0; + let iteration = 0; - // Instrument function returns - instrumentReturns.frameSize = frameSize; - instrumentReturns.walkFunction(func); + // Set of functions that have already been instrumented + let instrumentedFunctions = new Set(); - // Instrument function entry - let stmts = new Array(); - // __stack_pointer -= frameSize - stmts.push( - this.makeStackOffset(-frameSize) - ); - // memory.fill(__stack_pointer, 0, frameSize) - this.makeStackFill(frameSize, stmts); - - // Handle implicit return - let body = _BinaryenFunctionGetBody(func); - let bodyType = _BinaryenExpressionGetType(body); - if (bodyType == TypeRef.Unreachable) { - // body - stmts.push( - body - ); - } else if (bodyType == TypeRef.None) { - // body - stmts.push( - body - ); - // __stack_pointer += frameSize - stmts.push( - this.makeStackOffset(+frameSize) - ); - } else { - let temp = this.getSharedTemp(func, bodyType); - // t = body - stmts.push( - module.local_set(temp, body, false) - ); - // __stack_pointer += frameSize - stmts.push( - this.makeStackOffset(+frameSize) - ); - // -> t + while (true) { + let currentNumFunctions = _BinaryenGetNumFunctions(moduleRef); + if (currentNumFunctions == lastNumFunctions) break; + + // Walk only the newly added functions (from lastNumFunctions to currentNumFunctions) + for (let i = lastNumFunctions; i < currentNumFunctions; ++i) { + this.walkFunction(_BinaryenGetFunctionByIndex(moduleRef, i)); + } + + // Instrument returns and entries for functions with slots that haven't been instrumented yet + let instrumentReturns = new InstrumentReturns(this); + for (let _keys = Map_keys(this.slotMaps), i = 0, k = _keys.length; i < k; ++i) { + let func = _keys[i]; + if (instrumentedFunctions.has(func)) continue; + instrumentedFunctions.add(func); + + let slotMap = changetype(this.slotMaps.get(func)); + let frameSize = slotMap.size * this.ptrSize; + + // Instrument function returns + instrumentReturns.frameSize = frameSize; + instrumentReturns.walkFunction(func); + + // Instrument function entry + let stmts = new Array(); + // __stack_pointer -= frameSize stmts.push( - module.local_get(temp, bodyType) + this.makeStackOffset(-frameSize) ); + // memory.fill(__stack_pointer, 0, frameSize) + this.makeStackFill(frameSize, stmts); + + // Handle implicit return + let body = _BinaryenFunctionGetBody(func); + let bodyType = _BinaryenExpressionGetType(body); + if (bodyType == TypeRef.Unreachable) { + // body + stmts.push( + body + ); + } else if (bodyType == TypeRef.None) { + // body + stmts.push( + body + ); + // __stack_pointer += frameSize + stmts.push( + this.makeStackOffset(+frameSize) + ); + } else { + let temp = this.getSharedTemp(func, bodyType); + // t = body + stmts.push( + module.local_set(temp, body, false) + ); + // __stack_pointer += frameSize + stmts.push( + this.makeStackOffset(+frameSize) + ); + // -> t + stmts.push( + module.local_get(temp, bodyType) + ); + } + _BinaryenFunctionSetBody(func, module.flatten(stmts, bodyType)); } - _BinaryenFunctionSetBody(func, module.flatten(stmts, bodyType)); - } - // Update functions we added more locals to - // TODO: _BinaryenFunctionAddVar ? - for (let _keys = Map_keys(this.tempMaps), i = 0, k = _keys.length; i < k; ++i) { - this.updateFunction(_keys[i]); + lastNumFunctions = currentNumFunctions; + iteration++; + + // Safety limit to prevent infinite loops + if (iteration > 100) { + throw new Error("ShadowStackPass: too many iterations, possible infinite loop"); + } } - // Update exports taking managed arguments + // Walk globals (only once, since they don't trigger new function compilation) + this.walkGlobals(); + + // Update exports taking managed arguments. This may trigger compilation + // of new functions (e.g., abort via makeStackCheck -> makeStaticAbort). let exportMap = this.exportMap; for (let _keys = Map_keys(exportMap), i = 0, k = _keys.length; i < k; ++i) { let exportName = _keys[i]; @@ -646,6 +676,49 @@ export class ShadowStackPass extends Pass { let managedOperandIndices = changetype(exportMap.get(exportName)); this.updateExport(exportRef, managedOperandIndices); } + + // Walk and instrument any functions added during export processing + let postExportNumFunctions = _BinaryenGetNumFunctions(moduleRef); + while (lastNumFunctions < postExportNumFunctions) { + for (let i = lastNumFunctions; i < postExportNumFunctions; ++i) { + this.walkFunction(_BinaryenGetFunctionByIndex(moduleRef, i)); + } + let instrumentReturns = new InstrumentReturns(this); + for (let _keys = Map_keys(this.slotMaps), i = 0, k = _keys.length; i < k; ++i) { + let func = _keys[i]; + if (instrumentedFunctions.has(func)) continue; + instrumentedFunctions.add(func); + let slotMap = changetype(this.slotMaps.get(func)); + let frameSize = slotMap.size * this.ptrSize; + instrumentReturns.frameSize = frameSize; + instrumentReturns.walkFunction(func); + let stmts = new Array(); + stmts.push(this.makeStackOffset(-frameSize)); + this.makeStackFill(frameSize, stmts); + let body = _BinaryenFunctionGetBody(func); + let bodyType = _BinaryenExpressionGetType(body); + if (bodyType == TypeRef.Unreachable) { + stmts.push(body); + } else if (bodyType == TypeRef.None) { + stmts.push(body); + stmts.push(this.makeStackOffset(+frameSize)); + } else { + let temp = this.getSharedTemp(func, bodyType); + stmts.push(module.local_set(temp, body, false)); + stmts.push(this.makeStackOffset(+frameSize)); + stmts.push(module.local_get(temp, bodyType)); + } + _BinaryenFunctionSetBody(func, module.flatten(stmts, bodyType)); + } + lastNumFunctions = postExportNumFunctions; + postExportNumFunctions = _BinaryenGetNumFunctions(moduleRef); + } + + // Update functions we added more locals to + // TODO: _BinaryenFunctionAddVar ? + for (let _keys = Map_keys(this.tempMaps), i = 0, k = _keys.length; i < k; ++i) { + this.updateFunction(_keys[i]); + } } } diff --git a/src/program.ts b/src/program.ts index f5d9b7cae6..bc1809c386 100644 --- a/src/program.ts +++ b/src/program.ts @@ -1,5 +1,5 @@ /** - * @fileoverview AssemblyScript's intermediate representation. + * @fileoverview ToilScript's intermediate representation. * * The compiler uses Binaryen IR, which is fairly low level, as its * primary intermediate representation, with the following structures @@ -79,6 +79,7 @@ import { SourceKind, DecoratorNode, DecoratorKind, + findDecorator, TypeParameterNode, TypeNode, NamedTypeNode, @@ -425,7 +426,7 @@ export namespace OperatorKind { } } -/** Represents an AssemblyScript program. */ +/** Represents an ToilScript program. */ export class Program extends DiagnosticEmitter { /** Constructs a new program, optionally inheriting parser diagnostics. */ @@ -476,6 +477,10 @@ export class Program extends DiagnosticEmitter { elementsByDeclaration: Map = new Map(); /** Element instances by unique internal name. */ instancesByName: Map = new Map(); + /** Function decorated with `@main` (toil module entry point), if any. */ + mainFunction: FunctionPrototype | null = null; + /** Class decorated with `@daemon` (cold L4 entry), if any. At most one per project. */ + daemonClass: ClassPrototype | null = null; /** Classes wrapping basic types like `i32`. */ wrapperClasses: Map = new Map(); /** Managed classes contained in the program, by id. */ @@ -639,6 +644,14 @@ export class Program extends DiagnosticEmitter { } private _stringInstance: Class | null = null; + /** Gets the standard `Error` instance. */ + get errorInstance(): Class { + let cached = this._errorInstance; + if (!cached) this._errorInstance = cached = this.requireClass(CommonNames.Error); + return cached; + } + private _errorInstance: Class | null = null; + /** Gets the standard `RegExp` instance. */ get regexpInstance(): Class { let cached = this._regexpInstance; @@ -1090,7 +1103,9 @@ export class Program extends DiagnosticEmitter { this.registerConstantInteger(CommonNames.ASC_FEATURE_STRINGREF, Type.bool, i64_new(options.hasFeature(Feature.Strings) ? 1 : 0, 0)); this.registerConstantInteger(CommonNames.ASC_FEATURE_SHARED_EVERYTHING, Type.bool, - i64_new(options.hasFeature(Feature.Strings) ? 1 : 0, 0)); + i64_new(options.hasFeature(Feature.SharedEverything) ? 1 : 0, 0)); + this.registerConstantInteger(CommonNames.ASC_FEATURE_CLOSURES, Type.bool, + i64_new(options.hasFeature(Feature.Closures) ? 1 : 0, 0)); // remember deferred elements let queuedImports = new Array(); @@ -1502,6 +1517,59 @@ export class Program extends DiagnosticEmitter { this.markModuleExports(file); } } + + // Project-wide: a unit using `@stream` may not declare `@service`/`@remote` anywhere + // (spec 03 section 4.4 / 00 Appendix B1). Runs once after every source is initialized. + this.enforceStreamServiceExclusion(); + } + + /** + * Enforces the project-wide rule that a compilation unit using `@stream` cannot also + * declare `@service` or `@remote` anywhere (spec 03 section 4.4). The host loads one + * `hot.wasm` whose surface is either a stream node or an RPC service node, never both, + * so mixing them is a deploy-time ambiguity caught fail-closed at compile time. Reported + * at the offending `@service`/`@remote` site. Skipped in cold mode (neither flag is + * admitted there anyway). + */ + private enforceStreamServiceExclusion(): void { + if (this.options.targetMode == "cold") return; + let hasStream = false; + let firstServiceOrRemote: DecoratorNode | null = null; + for (let si = 0, sk = this.sources.length; si < sk; ++si) { + let source = this.sources[si]; + if (source.sourceKind != SourceKind.UserEntry && source.sourceKind != SourceKind.User) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind == NodeKind.ClassDeclaration) { + let classDeclaration = statement; + if (findDecorator(DecoratorKind.Stream, classDeclaration.decorators)) hasStream = true; + if (!firstServiceOrRemote) { + let serviceDecorator = findDecorator(DecoratorKind.Service, classDeclaration.decorators); + if (serviceDecorator) firstServiceOrRemote = serviceDecorator; + } + let members = classDeclaration.members; + for (let m = 0, mk = members.length; m < mk; ++m) { + let member = members[m]; + if (member.kind == NodeKind.MethodDeclaration && !firstServiceOrRemote) { + let remoteDecorator = findDecorator(DecoratorKind.Remote, (member).decorators); + if (remoteDecorator) firstServiceOrRemote = remoteDecorator; + } + } + } else if (statement.kind == NodeKind.FunctionDeclaration) { + if (!firstServiceOrRemote) { + let remoteDecorator = findDecorator(DecoratorKind.Remote, (statement).decorators); + if (remoteDecorator) firstServiceOrRemote = remoteDecorator; + } + } + } + } + if (hasStream && firstServiceOrRemote != null) { + this.error( + DiagnosticCode.A_project_using_stream_cannot_declare_service_or_remote, + firstServiceOrRemote.range + ); + } } /** Processes overridden members by this class in a base class. */ @@ -1681,8 +1749,14 @@ export class Program extends DiagnosticEmitter { /** Requires that a global library element of the specified kind is present and returns it. */ private require(name: string, kind: ElementKind): Element { let element = this.lookup(name); - if (!element) throw new Error(`Missing standard library component: ${name}`); - if (element.kind != kind) throw Error(`Invalid standard library component kind: ${name}`); + if (!element) { + this.error(DiagnosticCode.Element_0_not_found, null, name); + throw new Error(`Missing standard library component: ${name}`); + } + if (element.kind != kind) { + this.error(DiagnosticCode.Element_0_not_found, null, name); + throw new Error(`Invalid standard library component kind: ${name}`); + } return element; } @@ -1939,10 +2013,30 @@ export class Program extends DiagnosticEmitter { let flag = DecoratorFlags.fromKind(kind); if (flag) { if (!(acceptedFlags & flag)) { - this.error( - DiagnosticCode.Decorator_0_is_not_valid_here, - decorator.range, decorator.name.range.toString() - ); + // Prefer a target-mode-specific message when the rejection is because the + // flag is forbidden in the active hot/cold artifact (spec 03 section 4.2), + // falling back to the generic "not valid here" for a structural misplacement. + let targetMode = this.options.targetMode; + if (targetMode == "hot" && (flag == DecoratorFlags.Daemon || flag == DecoratorFlags.Scheduled)) { + this.error( + DiagnosticCode.Decorator_0_is_not_valid_in_the_hot_request_artifact, + decorator.range, decorator.name.range.toString() + ); + } else if (targetMode == "cold" && ( + flag == DecoratorFlags.Rest || flag == DecoratorFlags.Route || + flag == DecoratorFlags.Stream || flag == DecoratorFlags.StreamHook || + flag == DecoratorFlags.Service || flag == DecoratorFlags.Remote + )) { + this.error( + DiagnosticCode.Decorator_0_is_not_valid_in_the_cold_daemon_artifact, + decorator.range, decorator.name.range.toString() + ); + } else { + this.error( + DiagnosticCode.Decorator_0_is_not_valid_here, + decorator.range, decorator.name.range.toString() + ); + } } else if (flags & flag) { this.error( DiagnosticCode.Duplicate_decorator, @@ -2043,18 +2137,43 @@ export class Program extends DiagnosticEmitter { queuedImplements: ClassPrototype[] ): ClassPrototype | null { let name = declaration.name.text; + // Class-decorator gating is target-mode-conditioned (spec 03 section 4.2): + // hot/legacy admit @service/@rest/@stream; cold admits @daemon. @daemon is + // never admitted outside cold, so legacy (targetMode == null) rejects it too. + let targetMode = this.options.targetMode; + let classFlags = + DecoratorFlags.Global | + DecoratorFlags.Final | + DecoratorFlags.Unmanaged | + DecoratorFlags.Data | + DecoratorFlags.Database; + if (targetMode != "cold") { + classFlags |= DecoratorFlags.Service | DecoratorFlags.Rest | DecoratorFlags.Stream; + } + if (targetMode == "cold") { + classFlags |= DecoratorFlags.Daemon; + } let element = new ClassPrototype( name, parent, declaration, - this.checkDecorators(declaration.decorators, - DecoratorFlags.Global | - DecoratorFlags.Final | - DecoratorFlags.Unmanaged - ) + this.checkDecorators(declaration.decorators, classFlags) ); if (!parent.add(name, element)) return null; + // At most one `@daemon` class per project (spec 03 section 4.3), mirroring the + // single-`@main` rule. `@daemon` is cold-only, so this only fires in a cold build. + if (element.hasDecorator(DecoratorFlags.Daemon)) { + if (this.daemonClass) { + this.error( + DiagnosticCode.Only_one_daemon_class_is_allowed_per_project, + declaration.range + ); + } else { + this.daemonClass = element; + } + } + // remember classes that implement interfaces let implementsTypes = declaration.implementsTypes; if (implementsTypes) { @@ -2131,6 +2250,8 @@ export class Program extends DiagnosticEmitter { let decorators = declaration.decorators; let element: DeclaredElement; let acceptedFlags: DecoratorFlags = DecoratorFlags.Unsafe; + // `@collection` marks a ToilDB collection field in a `@database` class. + acceptedFlags |= DecoratorFlags.Collection; if (parent.is(CommonFlags.Ambient)) { acceptedFlags |= DecoratorFlags.External; } @@ -2168,11 +2289,25 @@ export class Program extends DiagnosticEmitter { ): FunctionPrototype | null { let name = declaration.name.text; let isStatic = declaration.is(CommonFlags.Static); + let methodTargetMode = this.options.targetMode; let acceptedFlags = DecoratorFlags.Inline | DecoratorFlags.Unsafe; + // ToilDB function kinds also apply to methods, including @rest route + // handlers. The parser's DB checker already walks MethodDeclaration bodies. + acceptedFlags |= DecoratorFlags.DbFunction; if (!declaration.is(CommonFlags.Generic)) { acceptedFlags |= DecoratorFlags.OperatorBinary | DecoratorFlags.OperatorPrefix | DecoratorFlags.OperatorPostfix; + // `@remote`/`@route` are hot/legacy method decorators (cold rejects them, spec 03 4.2). + if (methodTargetMode != "cold") { + acceptedFlags |= DecoratorFlags.Remote // `@remote` exposes a `@service` method as an RPC endpoint + | DecoratorFlags.Route // `@route`/`@get`/... exposes a `@rest` method as an HTTP route + | DecoratorFlags.StreamHook; // `@connect`/`@message`/`@close`/`@disconnect` stream hooks + } + // `@scheduled` is a cold-only method decorator inside a `@daemon` class (spec 03 4.2/4.5). + if (methodTargetMode == "cold") { + acceptedFlags |= DecoratorFlags.Scheduled; + } } if (parent.is(CommonFlags.Ambient)) { acceptedFlags |= DecoratorFlags.External; @@ -2192,6 +2327,16 @@ export class Program extends DiagnosticEmitter { declaration.range, `Builtin '${element.internalName}'` ); } + // `@scheduled` is only valid on a method inside a `@daemon` class (spec 03 section 4.5). + // The flag is only admitted in cold mode, so this fires only when a cold-build class is + // not a `@daemon`; the dedicated message is clearer than a generic "not valid here". + if (element.hasDecorator(DecoratorFlags.Scheduled) && !parent.hasDecorator(DecoratorFlags.Daemon)) { + let scheduledDecorator = findDecorator(DecoratorKind.Scheduled, declaration.decorators); + this.error( + DiagnosticCode.Scheduled_is_only_valid_inside_a_daemon_class, + scheduledDecorator ? scheduledDecorator.range : declaration.range + ); + } if (isStatic) { // global function assert(declaration.name.kind != NodeKind.Constructor); if (!parent.add(name, element)) return null; @@ -2612,6 +2757,9 @@ export class Program extends DiagnosticEmitter { ): FunctionPrototype | null { let name = declaration.name.text; let validDecorators = DecoratorFlags.Unsafe; + // ToilDB function kinds (`@query`/`@action`/`@job`/`@derive`/`@admin`) gate + // which data operations are legal (enforced by the dbKindCheck pass). + validDecorators |= DecoratorFlags.DbFunction; if (declaration.is(CommonFlags.Ambient)) { validDecorators |= DecoratorFlags.External | DecoratorFlags.ExternalJs; } else { @@ -2623,8 +2771,14 @@ export class Program extends DiagnosticEmitter { if (!declaration.is(CommonFlags.Instance)) { if (parent.kind != ElementKind.ClassPrototype) { validDecorators |= DecoratorFlags.Global; + if (!declaration.is(CommonFlags.Generic)) { + validDecorators |= DecoratorFlags.Main; // `@main` marks the module entry point (non-generic only) + } } } + if (!declaration.is(CommonFlags.Generic)) { + validDecorators |= DecoratorFlags.Remote; // `@remote` exposes a function as a client RPC endpoint (free fn or @service method) + } if (declaration.range.source.isLibrary) { validDecorators |= DecoratorFlags.Builtin; } @@ -2640,6 +2794,16 @@ export class Program extends DiagnosticEmitter { declaration.range, `Builtin '${element.internalName}'` ); } + if (element.hasDecorator(DecoratorFlags.Main)) { // toil module entry point + if (this.mainFunction) { + this.error( + DiagnosticCode.Duplicate_decorator, + declaration.range + ); + } else { + this.mainFunction = element; + } + } if (!parent.add(name, element)) return null; return element; } @@ -2962,7 +3126,33 @@ export enum DecoratorFlags { /** Is compiled lazily. */ Lazy = 1 << 10, /** Is considered unsafe code. */ - Unsafe = 1 << 11 + Unsafe = 1 << 11, + /** Is the toil module entry point (`@main`). */ + Main = 1 << 12, + /** Is a `@data` serializable class. */ + Data = 1 << 13, + /** Is a `@remote` client-callable function (RPC endpoint). */ + Remote = 1 << 14, + /** Is a `@service` class that namespaces `@remote` methods. */ + Service = 1 << 15, + /** Is a `@rest` HTTP controller class. */ + Rest = 1 << 16, + /** Is a `@route`/`@get`/`@post`/... HTTP route method. */ + Route = 1 << 17, + /** Is a `@database` logical-database class (ToilDB). */ + Database = 1 << 18, + /** Is a `@collection` field within a `@database` class. */ + Collection = 1 << 19, + /** Is a `@query`/`@action`/`@job`/`@derive`/`@admin` function (ToilDB kind). */ + DbFunction = 1 << 20, + /** Is a `@stream` protocol-handler class (L2/L3, hot artifact). */ + Stream = 1 << 21, + /** Is a `@daemon` L4 always-on entry class (cold artifact, at most one). */ + Daemon = 1 << 22, + /** Is a `@scheduled(spec)` task method inside a `@daemon` class. */ + Scheduled = 1 << 23, + /** Is a `@connect`/`@message`/`@close`/`@disconnect` stream lifecycle hook. */ + StreamHook = 1 << 24 } export namespace DecoratorFlags { @@ -2983,6 +3173,33 @@ export namespace DecoratorFlags { case DecoratorKind.Builtin: return DecoratorFlags.Builtin; case DecoratorKind.Lazy: return DecoratorFlags.Lazy; case DecoratorKind.Unsafe: return DecoratorFlags.Unsafe; + case DecoratorKind.Main: return DecoratorFlags.Main; + case DecoratorKind.Data: return DecoratorFlags.Data; + case DecoratorKind.Remote: return DecoratorFlags.Remote; + case DecoratorKind.Service: return DecoratorFlags.Service; + case DecoratorKind.Rest: return DecoratorFlags.Rest; + case DecoratorKind.Route: + case DecoratorKind.Get: + case DecoratorKind.Post: + case DecoratorKind.Put: + case DecoratorKind.Delete: + case DecoratorKind.Patch: + case DecoratorKind.Head: + case DecoratorKind.Options: return DecoratorFlags.Route; + case DecoratorKind.Database: return DecoratorFlags.Database; + case DecoratorKind.Collection: return DecoratorFlags.Collection; + case DecoratorKind.Query: + case DecoratorKind.Action: + case DecoratorKind.Job: + case DecoratorKind.Derive: + case DecoratorKind.Admin: return DecoratorFlags.DbFunction; + case DecoratorKind.Stream: return DecoratorFlags.Stream; + case DecoratorKind.Daemon: return DecoratorFlags.Daemon; + case DecoratorKind.Scheduled: return DecoratorFlags.Scheduled; + case DecoratorKind.Connect: + case DecoratorKind.Message: + case DecoratorKind.Close: + case DecoratorKind.Disconnect: return DecoratorFlags.StreamHook; default: return DecoratorFlags.None; } } @@ -3659,6 +3876,18 @@ export class Local extends VariableLikeElement { /** Original name of the (temporary) local. */ private originalName: string; + /** Whether this local is captured by a closure. */ + isCaptured: bool = false; + + /** Environment slot index if captured, -1 otherwise. */ + envSlotIndex: i32 = -1; + + /** The function whose environment this local is stored in. Set when captured. */ + envOwner: Function | null = null; + + /** Whether this local was accessed as a regular wasm local (before capture was discovered). */ + wasAccessedAsLocal: bool = false; + /** Constructs a new local variable. */ constructor( /** Simple name. */ @@ -3816,6 +4045,32 @@ export class Function extends TypedElement { /** Counting id of anonymous inner functions. */ nextAnonymousId: i32 = 0; + // Closure support + + /** Set of locals from outer scopes that this function captures. Maps Local to slot index. */ + capturedLocals: Map | null = null; + + /** The environment class for this function's captured locals, if any. */ + envClass: Class | null = null; + + /** The local variable holding the environment pointer in outer function. */ + envLocal: Local | null = null; + + /** The outer function whose environment this closure accesses. */ + outerFunction: Function | null = null; + + /** Local variable in a closure function that caches the environment pointer from the global. + * This is needed because indirect calls can overwrite the global. */ + closureEnvLocal: Local | null = null; + + /** Whether this function needs recompilation due to late capture discovery. */ + needsCaptureRecompile: bool = false; + + /** Whether this function requires an environment (is a closure). */ + get needsEnvironment(): bool { + return this.capturedLocals != null && this.capturedLocals.size > 0; + } + /** Constructs a new concrete function. */ constructor( /** Name incl. type parameters, i.e. `foo`. */ diff --git a/src/resolver.ts b/src/resolver.ts index 9576a4768f..2b54fd8163 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -2215,6 +2215,16 @@ export class Resolver extends DiagnosticEmitter { return thisLocal; } } + // Check for captured 'this' in closures - look up in outer flow chain + let thisLocal = ctxFlow.lookupLocal(CommonNames.this_); + if (!thisLocal) { + thisLocal = ctxFlow.lookupLocalInOuter(CommonNames.this_); + } + if (thisLocal) { + this.currentThisExpression = null; + this.currentElementExpression = null; + return thisLocal; + } let parent = ctxFlow.sourceFunction.parent; if (parent) { this.currentThisExpression = null; diff --git a/src/rpc.ts b/src/rpc.ts new file mode 100644 index 0000000000..c7d88920dd --- /dev/null +++ b/src/rpc.ts @@ -0,0 +1,894 @@ +/** + * RPC module emission. Walks the parsed user sources for `@data` types and the + * `@remote`/`@service` surface and emits ONE working TypeScript module + * (`--rpcModule `), refreshed whenever the server is built: + * + * - an `export class` per `@data` type, mirroring the ToilScript `@data` class + * (`encodeInto`/`encode`/`decodeFrom`/`decode`/`dataId`) over the global + * DataWriter/DataReader (no runtime JSON to load), and + * - `declare global { const Server: ... }`, the typed client-callable surface, so + * the IDE types `Server.x.y()` with zero imports (no separate `.d.ts` needed). + * + * AS types map to TS (u64 -> bigint, a `@data` class -> its generated interface). + * Generated from the AST alone, so it needs nothing beyond a parse. The runtime + * `Server` proxy + transport are provided by toiljs. + */ + +import { + NodeKind, + ClassDeclaration, + FunctionDeclaration, + MethodDeclaration, + FieldDeclaration, + TypeNode, + NamedTypeNode, + DecoratorNode, + DecoratorKind, + Expression, + ObjectLiteralExpression, + PropertyAccessExpression, + StringLiteralExpression +} from "./ast"; +import { CommonFlags } from "./common"; +import { Program } from "./program"; + +/** A field or parameter type, with one level of array unwrapped. */ +interface TypeRef { + /** AS type name (the element name for arrays, e.g. `Foo` for `Foo[]`). */ + type: string; + /** Whether the declared type was `T[]` / `Array`. */ + array: bool; +} + +interface RpcMember { + name: string; + ref: TypeRef; + /** Explicit visibility (`public`/`private`/`protected`), or "" for fields. */ + vis: string; + /** Whether the field was declared `readonly`. */ + ro: bool; +} +interface RpcData { name: string; typeId: u32; fields: RpcMember[]; } +interface RpcCallable { name: string; params: RpcMember[]; returns: TypeRef; } +interface RpcService { name: string; methods: RpcCallable[]; } + +/** One `@route`/`@get`/... method of a `@rest` controller, for the fetch client. */ +interface RestRoute { + /** Client route name (the method name). */ + name: string; + /** HTTP verb, e.g. `GET`. */ + http: string; + /** Full matcher pattern (prefix-joined), e.g. `/api/todos/:id`. */ + pattern: string; + /** `:param` names captured from the pattern, in order. */ + params: string[]; + /** `JSON` or `Binary`. */ + stream: string; + /** The `@data` request-body type, or null if the route takes no body. */ + bodyType: string | null; + /** Return type (a `@data` type, or `void`). */ + returns: TypeRef; + /** Whether the method returns a `Response` verbatim (client gets the raw fetch `Response`). */ + returnsResponse: bool; +} +/** A `@rest` controller and its routes. */ +interface RestController { name: string; key: string; routes: RestRoute[]; } + +/** Everything client-visible, collected once from the user sources. */ +interface RpcSurface { + data: RpcData[]; + services: RpcService[]; + remotes: RpcCallable[]; + rest: RestController[]; + /** The `@user` class name (the authenticated-user type), or null if none. + * At most one per program; drives the typed client `getUser()`. */ + userType: string | null; +} + +/** Stable per-`@data` typeId (FNV-1a over the class name); mirrors the parser. */ +function dataTypeId(name: string): u32 { + let hash = 0x811c9dc5; + for (let i = 0, k = name.length; i < k; ++i) { + hash = Math.imul(hash ^ name.charCodeAt(i), 0x01000193) >>> 0; + } + return hash >>> 0; +} + +/** True if `decorators` contains the given built-in decorator kind. */ +function hasDecorator(decorators: DecoratorNode[] | null, kind: DecoratorKind): bool { + if (decorators == null) return false; + for (let i = 0, k = decorators.length; i < k; ++i) { + if (decorators[i].decoratorKind == kind) return true; + } + return false; +} + +/** The first decorator of the given kind, or null. */ +function getDecorator(decorators: DecoratorNode[] | null, kind: DecoratorKind): DecoratorNode | null { + if (decorators == null) return null; + for (let i = 0, k = decorators.length; i < k; ++i) { + if (decorators[i].decoratorKind == kind) return decorators[i]; + } + return null; +} + +/** The member name of an enum access (`Methods.GET` -> "GET"), or null. */ +function enumMember(expr: Expression | null): string | null { + if (expr != null && expr instanceof PropertyAccessExpression) { + return (expr).property.text; + } + return null; +} + +/** An object-literal field value by name, or null. */ +function objectField(obj: ObjectLiteralExpression, name: string): Expression | null { + let names = obj.names; + for (let i = 0, k = names.length; i < k; ++i) { + if (names[i].text == name) return obj.values[i]; + } + return null; +} + +/** The `@rest("api")` mount prefix (`/api`), or "" for the bare/object (root) form. */ +function restPrefix(deco: DecoratorNode): string { + let args = deco.args; + if (args != null && args.length > 0 && args[0] instanceof StringLiteralExpression) { + let s = (args[0]).value.trim(); + if (s.length == 0 || s == "/") return ""; + if (s.charAt(0) != "/") s = "/" + s; + return s.replace(/\/+$/, ""); + } + return ""; +} + +/** The class-default stream from `@rest({ stream: DataStream.Binary })`, else "JSON". */ +function restClassStream(deco: DecoratorNode): string { + let args = deco.args; + if (args != null && args.length > 0 && args[0] instanceof ObjectLiteralExpression) { + let s = enumMember(objectField(args[0], "stream")); + if (s != null) return s; + } + return "JSON"; +} + +/** The `@route`/`@get`/... decorator on a method, or null. */ +function routeDecoratorOf(method: MethodDeclaration): DecoratorNode | null { + let decos = method.decorators; + if (decos == null) return null; + for (let i = 0, k = decos.length; i < k; ++i) { + switch (decos[i].decoratorKind) { + case DecoratorKind.Route: + case DecoratorKind.Get: + case DecoratorKind.Post: + case DecoratorKind.Put: + case DecoratorKind.Delete: + case DecoratorKind.Patch: + case DecoratorKind.Head: + case DecoratorKind.Options: return decos[i]; + } + } + return null; +} + +/** HTTP verb name for a verb decorator kind. */ +function verbName(kind: DecoratorKind): string { + switch (kind) { + case DecoratorKind.Post: return "POST"; + case DecoratorKind.Put: return "PUT"; + case DecoratorKind.Delete: return "DELETE"; + case DecoratorKind.Patch: return "PATCH"; + case DecoratorKind.Head: return "HEAD"; + case DecoratorKind.Options: return "OPTIONS"; + default: return "GET"; + } +} + +/** Join a mount prefix and a route path into the matcher pattern (mirrors the parser). */ +function joinPath(prefix: string, routePath: string): string { + let r = routePath.trim(); + if (r.length == 0) r = "/"; + if (r.charAt(0) != "/") r = "/" + r; + if (r == "/") return prefix.length > 0 ? prefix : "/"; + r = r.replace(/\/+$/, ""); + let full = prefix + r; + return full.length == 0 ? "/" : full; +} + +/** The `:param` names of a pattern, in order. */ +function pathParams(pattern: string): string[] { + let out = new Array(); + let segs = pattern.split("/"); + for (let i = 0, k = segs.length; i < k; ++i) { + let s = segs[i]; + if (s.length > 1 && s.charAt(0) == ":") out.push(s.substring(1)); + } + return out; +} + +/** Reads one route method into a `RestRoute`, or null if it isn't well-formed. */ +function readRoute(prefix: string, classStream: string, method: MethodDeclaration, deco: DecoratorNode): RestRoute | null { + let http: string; + let routePath: string; + let stream = classStream; + + if (deco.decoratorKind == DecoratorKind.Route) { + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof ObjectLiteralExpression)) return null; + let obj = args[0]; + let m = enumMember(objectField(obj, "method")); + let pv = objectField(obj, "path"); + if (m == null || pv == null || !(pv instanceof StringLiteralExpression)) return null; + http = m; + routePath = (pv).value; + let s = enumMember(objectField(obj, "stream")); + if (s != null) stream = s; + } else { + http = verbName(deco.decoratorKind); + let args = deco.args; + if (args == null || args.length == 0 || !(args[0] instanceof StringLiteralExpression)) return null; + routePath = (args[0]).value; + } + + let pattern = joinPath(prefix, routePath); + + // Classify params: a `RouteContext` param is server-only; anything else is the @data body. + let bodyType: string | null = null; + let params = method.signature.parameters; + for (let i = 0, k = params.length; i < k; ++i) { + let ref = describeType(params[i].type); + if (ref.type == "RouteContext") continue; + bodyType = ref.type; + } + + let returns = describeType(method.signature.returnType); + let returnsResponse = returns.type == "Response"; + return { name: method.name.text, http, pattern, params: pathParams(pattern), stream, bodyType, returns, returnsResponse }; +} + +/** Reduces a type node to a name plus an array flag (one level). */ +function describeType(typeNode: TypeNode | null): TypeRef { + if (typeNode == null || !(typeNode instanceof NamedTypeNode)) { + return { type: "void", array: false }; + } + let named = typeNode; + let name = named.name.identifier.text; + let typeArgs = named.typeArguments; + if (name == "Array" && typeArgs != null && typeArgs.length == 1 && typeArgs[0] instanceof NamedTypeNode) { + return { type: (typeArgs[0]).name.identifier.text, array: true }; + } + return { type: name, array: false }; +} + +/** Extracts the ordered params + return type of a function or method. */ +function describeCallable(fn: FunctionDeclaration): RpcCallable { + let params = new Array(); + let nodes = fn.signature.parameters; + for (let i = 0, k = nodes.length; i < k; ++i) { + let node = nodes[i]; + params.push({ name: node.name.text, ref: describeType(node.type), vis: "", ro: false }); + } + return { name: fn.name.text, params, returns: describeType(fn.signature.returnType) }; +} + +/** Collects a `@data` type and/or a `@service` from a top-level class. */ +function collectClass(cls: ClassDeclaration, surface: RpcSurface): void { + let decorators = cls.decorators; + let members = cls.members; + // `@user` is a `@data` class (same binary codec on the client) that also names + // the authenticated-user type for the generated `getUser()`. Collect either as + // a client codec. + let isUser = hasDecorator(decorators, DecoratorKind.User); + if (hasDecorator(decorators, DecoratorKind.Data) || isUser) { + let fields = new Array(); + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.FieldDeclaration) continue; + let field = member; + if (field.is(CommonFlags.Static)) continue; + fields.push({ name: field.name.text, ref: describeType(field.type), vis: fieldVis(field), ro: field.is(CommonFlags.Readonly) }); + } + surface.data.push({ name: cls.name.text, typeId: dataTypeId(cls.name.text), fields }); + if (isUser) surface.userType = cls.name.text; + } + if (hasDecorator(decorators, DecoratorKind.Service)) { + let methods = new Array(); + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + if (!hasDecorator(method.decorators, DecoratorKind.Remote)) continue; + methods.push(describeCallable(method)); + } + surface.services.push({ name: cls.name.text, methods }); + } + let restDeco = getDecorator(decorators, DecoratorKind.Rest); + if (restDeco != null) { + let prefix = restPrefix(restDeco); + let classStream = restClassStream(restDeco); + let routes = new Array(); + for (let i = 0, k = members.length; i < k; ++i) { + let member = members[i]; + if (member.kind != NodeKind.MethodDeclaration) continue; + let method = member; + let routeDeco = routeDecoratorOf(method); + if (routeDeco == null) continue; + let route = readRoute(prefix, classStream, method, routeDeco); + if (route != null) routes.push(route); + } + if (routes.length) surface.rest.push({ name: cls.name.text, key: serviceKey(cls.name.text), routes }); + } +} + +/** Walks the user (non-library) sources of `program` for the client-visible surface. */ +function collectSurface(program: Program): RpcSurface { + let surface: RpcSurface = { data: [], services: [], remotes: [], rest: [], userType: null }; + let sources = program.sources; + for (let i = 0, k = sources.length; i < k; ++i) { + let source = sources[i]; + if (source.isLibrary) continue; + // A `migrations/*.migration.ts` file holds only the KEPT old `@data` shapes + + // `@migrate` transforms; those are internal to the decoder and must not become + // client-facing RPC types. Skip the whole migration source. + if (source.internalPath.endsWith(".migration")) continue; + let statements = source.statements; + for (let j = 0, l = statements.length; j < l; ++j) { + let statement = statements[j]; + if (statement.kind == NodeKind.ClassDeclaration) { + collectClass(statement, surface); + } else if (statement.kind == NodeKind.FunctionDeclaration) { + let fn = statement; + if (hasDecorator(fn.decorators, DecoratorKind.Remote)) { + surface.remotes.push(describeCallable(fn)); + } + } + } + } + return surface; +} + +/** Visibility of a field: the declared one, defaulting to `public`. */ +function fieldVis(field: FieldDeclaration): string { + if (field.is(CommonFlags.Private)) return "private"; + if (field.is(CommonFlags.Protected)) return "protected"; + return "public"; +} + +/** `public `/`private `/`protected ` (+ `readonly `) prefix for a field declaration. */ +function modPrefix(member: RpcMember): string { + let prefix = member.vis + " "; + if (member.ro) prefix += "readonly "; + return prefix; +} + +/** `Auth` -> `auth` for the client-facing service key. */ +function serviceKey(name: string): string { + return name.length ? name.charAt(0).toLowerCase() + name.substring(1) : name; +} + +/** Maps an AS type name to its TS equivalent (`@data` types keep their bare name). */ +function mapName(name: string, dataNames: Set): string { + switch (name) { + case "u8": case "u16": case "u32": + case "i8": case "i16": case "i32": + case "f32": case "f64": return "number"; + case "u64": case "i64": + case "u128": case "i128": + case "u256": case "i256": return "bigint"; + case "bool": case "boolean": return "boolean"; + case "string": return "string"; + case "Uint8Array": return "Uint8Array"; + case "void": return "void"; + default: + if (dataNames.has(name)) return name; + throw new Error("@data: unsupported type '" + name + "' (use a scalar, string, bool, native bignum, Uint8Array, a nested @data class, or T[])"); + } +} + +/** Full TS type for a ref, including the array suffix. */ +function tsType(ref: TypeRef, dataNames: Set): string { + let base = mapName(ref.type, dataNames); + return ref.array ? base + "[]" : base; +} + +/** `name: Type, name: Type` parameter list. */ +function paramList(params: RpcMember[], dataNames: Set): string { + let parts = new Array(); + for (let i = 0, k = params.length; i < k; ++i) { + parts.push(params[i].name + ": " + tsType(params[i].ref, dataNames)); + } + return parts.join(", "); +} + +/** DataWriter/DataReader method suffix for a scalar AS type, or "" for nested @data. */ +function methodSuffix(name: string): string { + switch (name) { + case "u8": return "U8"; case "u16": return "U16"; case "u32": return "U32"; case "u64": return "U64"; + case "i8": return "I8"; case "i16": return "I16"; case "i32": return "I32"; case "i64": return "I64"; + case "f32": return "F32"; case "f64": return "F64"; + case "bool": case "boolean": return "Bool"; + case "string": return "String"; + case "Uint8Array": return "Bytes"; + case "u128": return "U128"; case "i128": return "I128"; case "u256": return "U256"; case "i256": return "I256"; + default: return ""; + } +} + +/** Statement writing one value (scalar via DataWriter, nested @data via `.encodeInto`). */ +function writeOne(typeName: string, valueExpr: string): string { + let suffix = methodSuffix(typeName); + if (suffix.length) return "w.write" + suffix + "(" + valueExpr + ");"; + return valueExpr + ".encodeInto(w);"; +} + +/** Expression reading one value (scalar via DataReader, nested @data via `.decodeFrom`). */ +function readOne(typeName: string): string { + let suffix = methodSuffix(typeName); + if (suffix.length) return "r.read" + suffix + "()"; + return typeName + ".decodeFrom(r)"; +} + +/** + * TS expression coercing one parsed-JSON value to its `@data` field type. 64-bit-and-up + * integers arrive as decimal strings (exact at any size; `BigInt("...")` revives them). + * 128/256-bit values go through `__toilUnlimb`, which also accepts the legacy + * limb-array shape older servers emitted (`BigInt()` alone throws on an array). + */ +function jsonReviveScalar(typeName: string, access: string, dataNames: Set): string { + switch (typeName) { + case "u8": case "u16": case "u32": + case "i8": case "i16": case "i32": + case "f32": case "f64": return "Number(" + access + " ?? 0)"; + case "u64": case "i64": return "BigInt(" + access + " ?? 0)"; + case "u128": return "__toilUnlimb(" + access + ", 2, false)"; + case "i128": return "__toilUnlimb(" + access + ", 2, true)"; + case "u256": return "__toilUnlimb(" + access + ", 4, false)"; + case "i256": return "__toilUnlimb(" + access + ", 4, true)"; + case "bool": case "boolean": return "Boolean(" + access + ")"; + case "string": return "String(" + access + " ?? \"\")"; + case "Uint8Array": return "Uint8Array.from(Array.isArray(" + access + ") ? " + access + " : [])"; + default: + if (dataNames.has(typeName)) return typeName + ".fromJSONValue(" + access + ")"; + throw new Error("@data: unsupported type '" + typeName + "'"); + } +} + +/** + * TS expression converting one field value to its JSON-wire shape for sending: every + * integer 64 bits and up becomes a decimal string (exact at any size, symmetric with the + * server's `toJSON`, and safe to `JSON.stringify` since a bare `bigint` cannot be); + * nested `@data` recurses via `toJSONValue()`; everything else passes through. + */ +function jsonSendScalar(typeName: string, access: string, dataNames: Set): string { + switch (typeName) { + case "u64": case "i64": + case "u128": case "i128": + case "u256": case "i256": return access + ".toString()"; + case "Uint8Array": return "Array.from(" + access + ")"; + default: + if (dataNames.has(typeName)) return access + ".toJSONValue()"; + return access; + } +} + +/** Whether sending this type needs a transform (vs passing the value straight through). */ +function jsonSendNeedsTransform(typeName: string, dataNames: Set): bool { + switch (typeName) { + case "u64": case "i64": + case "u128": case "i128": + case "u256": case "i256": + case "Uint8Array": return true; + default: return dataNames.has(typeName); + } +} + +/** The bignum revive helper, emitted once into the generated module. */ +function emitLimbHelpers(): string { + let out = "// 64-bit-and-up integers cross the JSON wire as decimal strings (exact through\n"; + out += "// JSON.parse at any size). Older servers emitted 128/256-bit values as little-endian\n"; + out += "// arrays of 64-bit limbs instead; the array branch revives those.\n"; + out += "function __toilUnlimb(v: any, n: number, signedTop: boolean): bigint {\n"; + out += " if (!Array.isArray(v)) { try { return BigInt(v ?? 0); } catch { return 0n; } }\n"; + out += " let r = 0n;\n"; + out += " for (let i = 0; i < n; i++) {\n"; + out += " let limb = 0n; try { limb = BigInt(v[i] ?? 0); } catch {}\n"; + out += " r += (i === n - 1 && signedTop ? BigInt.asIntN(64, limb) : BigInt.asUintN(64, limb)) << BigInt(64 * i);\n"; + out += " }\n"; + out += " return r;\n"; + out += "}\n"; + return out; +} + +/** Default initializer for a field, so `new X()` is valid with no arguments. */ +function defaultValue(ref: TypeRef, dataNames: Set): string { + if (ref.array) return "[]"; + switch (ref.type) { + case "u8": case "u16": case "u32": + case "i8": case "i16": case "i32": + case "f32": case "f64": return "0"; + case "u64": case "i64": + case "u128": case "i128": + case "u256": case "i256": return "0n"; + case "bool": case "boolean": return "false"; + case "string": return "\"\""; + case "Uint8Array": return "new Uint8Array()"; + default: + if (dataNames.has(ref.type)) return "new " + ref.type + "()"; + throw new Error("@data: unsupported field type '" + ref.type + "'"); + } +} + +/** + * Emits the class for one `@data` type, mirroring the ToilScript `@data` class: a + * positional constructor (every field, defaulted, so `new T()` and `new T(a, b)` + * both work) plus `encodeInto`/`encode`/`decodeFrom`/`decode`/`dataId`. Every member + * carries an explicit access modifier. + */ +function emitDataClass(d: RpcData, dataNames: Set): string { + let typeId = d.typeId.toString(); + let out = "export class " + d.name + " {\n"; + + // Field declarations (initialized by the constructor below). + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + out += " " + modPrefix(field) + field.name + ": " + tsType(field.ref, dataNames) + ";\n"; + } + out += "\n"; + + // Positional constructor with per-field defaults. + if (d.fields.length == 0) { + out += " public constructor() {}\n\n"; + } else { + out += " public constructor(\n"; + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + out += " " + field.name + ": " + tsType(field.ref, dataNames) + " = " + defaultValue(field.ref, dataNames) + ",\n"; + } + out += " ) {\n"; + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + out += " this." + field.name + " = " + field.name + ";\n"; + } + out += " }\n\n"; + } + + out += " public encodeInto(w: DataWriter): void {\n"; + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + let access = "this." + field.name; + if (field.ref.array) { + out += " w.writeU32(" + access + ".length);\n"; + out += " for (let i = 0, n = " + access + ".length; i < n; i++) " + writeOne(field.ref.type, access + "[i]") + "\n"; + } else { + out += " " + writeOne(field.ref.type, access) + "\n"; + } + } + out += " }\n\n"; + + // `Uint8Array` (not the `ArrayBufferLike` default) so the bytes are + // accepted directly as a `fetch` body for `@rest({ stream: DataStream.Binary })` routes. + out += " public encode(): Uint8Array {\n"; + out += " const w = new DataWriter();\n"; + out += " w.writeU32(" + typeId + ");\n"; + out += " this.encodeInto(w);\n"; + out += " return w.toBytes();\n"; + out += " }\n\n"; + + // Read each field into a local (in order), then build via the constructor, so + // `readonly` fields are set without a cast. + out += " public static decodeFrom(r: DataReader): " + d.name + " {\n"; + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + if (field.ref.array) { + let elemTs = mapName(field.ref.type, dataNames); + out += " const " + field.name + ": " + elemTs + "[] = [];\n"; + // `&& r.ok` bounds the loop to the bytes actually present, so a hostile count can't OOM. + out += " for (let i = 0, n = r.readU32(); i < n && r.ok; i++) " + field.name + ".push(" + readOne(field.ref.type) + ");\n"; + } else { + out += " const " + field.name + " = " + readOne(field.ref.type) + ";\n"; + } + } + let args = new Array(); + for (let f = 0, fk = d.fields.length; f < fk; ++f) args.push(d.fields[f].name); + out += " return new " + d.name + "(" + args.join(", ") + ");\n"; + out += " }\n\n"; + + out += " public static decode(buf: Uint8Array): " + d.name + " {\n"; + out += " const r = new DataReader(buf);\n"; + out += " r.readU32();\n"; + out += " return " + d.name + ".decodeFrom(r);\n"; + out += " }\n\n"; + + out += " public static dataId(): number {\n"; + out += " return " + typeId + ";\n"; + out += " }\n\n"; + + // JSON revival (for routes with `stream: DataStream.JSON`). Mirrors `decodeFrom`: + // read each field into a local, then build via the constructor (so `readonly` is set + // without a cast). Note: JSON numbers lose precision above 2^53 - prefer the Binary + // stream for large `u64`/bignum fields. + out += " public static fromJSONValue(v: any): " + d.name + " {\n"; + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + let src = "(v ? v." + field.name + " : undefined)"; + if (field.ref.array) { + let elemTs = mapName(field.ref.type, dataNames); + out += " const " + field.name + ": " + elemTs + "[] = (Array.isArray(" + src + ") ? " + src + " : []).map((x: any) => " + jsonReviveScalar(field.ref.type, "x", dataNames) + ");\n"; + } else { + out += " const " + field.name + " = " + jsonReviveScalar(field.ref.type, src, dataNames) + ";\n"; + } + } + let jargs = new Array(); + for (let f = 0, fk = d.fields.length; f < fk; ++f) jargs.push(d.fields[f].name); + out += " return new " + d.name + "(" + jargs.join(", ") + ");\n"; + out += " }\n\n"; + + // JSON-wire shape for sending (the inverse of `fromJSONValue`): 128/256-bit fields + // become limb arrays, nested @data recurses. `__toilJson` calls this on @data bodies. + out += " public toJSONValue(): any {\n"; + let jfields = new Array(); + for (let f = 0, fk = d.fields.length; f < fk; ++f) { + let field = d.fields[f]; + let access = "this." + field.name; + let expr: string; + if (field.ref.array) { + expr = jsonSendNeedsTransform(field.ref.type, dataNames) + ? access + ".map((x) => " + jsonSendScalar(field.ref.type, "x", dataNames) + ")" + : access; + } else { + expr = jsonSendScalar(field.ref.type, access, dataNames); + } + jfields.push(field.name + ": " + expr); + } + out += " return { " + jfields.join(", ") + " };\n"; + out += " }\n"; + + out += "}\n"; + return out; +} + +/** The args parameter + return type for one client REST route. */ +/** + * A safe TS object key for a `:param` name. A clean identifier is emitted bare; anything + * else is quoted (every char escaped) so a hostile route path - e.g. `/:x}; })(); evil((` + * captured as a "param name" - can never break out of the generated args type into the + * surrounding `__toilRest` object literal. (The matcher pattern + URL are already + * `JSON.stringify`d; this closes the one remaining free-form-string -> code path.) + */ +function tsKey(name: string): string { + return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name); +} + +function routeSig(r: RestRoute, dataNames: Set): { argsParam: string, ret: string } { + let fields = new Array(); + if (r.params.length) { + let ps = new Array(); + for (let i = 0, k = r.params.length; i < k; ++i) ps.push(tsKey(r.params[i]) + ": string | number | bigint"); + fields.push("params: { " + ps.join("; ") + " }"); + } + if (r.bodyType != null) fields.push("body: " + mapName(r.bodyType, dataNames)); + fields.push("query?: Record"); + fields.push("headers?: Record"); + let argsType = "{ " + fields.join("; ") + " }"; + let required = r.params.length > 0 || r.bodyType != null; + let ret = r.returnsResponse ? "Promise" : (r.returns.type == "void" ? "Promise" : "Promise<" + tsType(r.returns, dataNames) + ">"); + return { argsParam: (required ? "args: " : "args?: ") + argsType, ret }; +} + +/** + * Emits the working `Server.REST` fetch client (attached to `globalThis` so the + * toiljs `Server` proxy can surface it) plus a tiny URL builder. Returns "" when + * the project declares no `@rest` controllers. + */ +function emitRestClient(surface: RpcSurface, dataNames: Set): string { + if (surface.rest.length == 0) return ""; + let out = "// Generated REST fetch client. Reached as `Server.REST..(args)`.\n"; + out += "function __toilUrl(pattern: string, params?: Record, query?: Record): string {\n"; + out += " let path = pattern;\n"; + out += " if (params) for (const k in params) path = path.replace(\":\" + k, encodeURIComponent(String(params[k])));\n"; + out += " if (query) {\n"; + out += " const usp = new URLSearchParams();\n"; + out += " for (const k in query) usp.set(k, String(query[k]));\n"; + out += " const qs = usp.toString();\n"; + out += " if (qs) path += (path.includes(\"?\") ? \"&\" : \"?\") + qs;\n"; + out += " }\n"; + out += " return path;\n"; + out += "}\n\n"; + + // Whether any route sends a JSON body (so the `__toilJson` helper is actually used). + let needsJson = false; + for (let c = 0, ck = surface.rest.length; c < ck && !needsJson; ++c) { + let ctrl = surface.rest[c]; + for (let i = 0, k = ctrl.routes.length; i < k; ++i) { + let r = ctrl.routes[i]; + if (r.bodyType != null && r.stream != "Binary") { needsJson = true; break; } + } + } + + // JSON body serializer. `toJSONValue` has already turned every 64-bit-and-up integer + // into a decimal string, so a @data body carries no bare `bigint`; the `bigint` branch + // below is a defensive fallback (e.g. a hand-built value) that emits a raw number token. + if (needsJson) { + out += "function __toilJson(v: any): string {\n"; + out += " if (v === null || v === undefined) return \"null\";\n"; + out += " const t = typeof v;\n"; + out += " if (t === \"bigint\") return v.toString();\n"; + out += " if (t === \"number\") return Number.isFinite(v) ? String(v) : \"null\";\n"; + out += " if (t === \"boolean\") return v ? \"true\" : \"false\";\n"; + out += " if (t === \"string\") return JSON.stringify(v);\n"; + out += " if (Array.isArray(v)) return \"[\" + v.map((x: any) => __toilJson(x)).join(\",\") + \"]\";\n"; + out += " if (typeof v.toJSONValue === \"function\") return __toilJson(v.toJSONValue());\n"; + out += " let s = \"{\", first = true;\n"; + out += " for (const k in v) {\n"; + out += " if (!Object.prototype.hasOwnProperty.call(v, k)) continue;\n"; + out += " const val = v[k];\n"; + out += " if (val === undefined || typeof val === \"function\") continue;\n"; + out += " s += (first ? \"\" : \",\") + JSON.stringify(k) + \":\" + __toilJson(val);\n"; + out += " first = false;\n"; + out += " }\n"; + out += " return s + \"}\";\n"; + out += "}\n\n"; + } + + out += "const __toilRest = {\n"; + for (let c = 0, ck = surface.rest.length; c < ck; ++c) { + let ctrl = surface.rest[c]; + out += " " + ctrl.key + ": {\n"; + for (let i = 0, k = ctrl.routes.length; i < k; ++i) { + let r = ctrl.routes[i]; + let sig = routeSig(r, dataNames); + out += " async " + r.name + "(" + sig.argsParam + "): " + sig.ret + " {\n"; + out += " const __url = __toilUrl(" + JSON.stringify(r.pattern) + ", " + (r.params.length ? "args.params as any" : "undefined") + ", args?.query);\n"; + let ct = r.bodyType != null ? (r.stream == "Binary" ? "application/octet-stream" : "application/json") : ""; + let headers = "{ "; + if (ct.length) headers += JSON.stringify("content-type") + ": " + JSON.stringify(ct) + ", "; + headers += "...(args?.headers ?? {}) }"; + let bodyInit = r.bodyType != null ? (r.stream == "Binary" ? ", body: args.body.encode()" : ", body: __toilJson(args.body)") : ""; + out += " const __res = await fetch(__url, { method: " + JSON.stringify(r.http) + ", headers: " + headers + bodyInit + " });\n"; + out += " if (!__res.ok) throw new Error(`" + "Server.REST." + ctrl.key + "." + r.name + " ${__res.status}`);\n"; + if (r.returnsResponse) { + out += " return __res;\n"; + } else if (r.returns.type == "void") { + out += " return;\n"; + } else if (r.stream == "Binary") { + out += " const __buf = new Uint8Array(await __res.arrayBuffer());\n"; + out += " return " + r.returns.type + ".decode(__buf);\n"; + } else if (r.returns.array) { + out += " const __j = await __res.json();\n"; + out += " return (Array.isArray(__j) ? __j : []).map((x: any) => " + r.returns.type + ".fromJSONValue(x));\n"; + } else { + out += " return " + r.returns.type + ".fromJSONValue(await __res.json());\n"; + } + out += " },\n"; + } + out += " },\n"; + } + out += "};\n"; + out += "if (typeof globalThis !== \"undefined\") (globalThis as any).__toilRest = __toilRest;\n"; + return out; +} + +/** Emits the `declare global { const Server: {...} }` ambient client surface. */ +function emitServerSurface(surface: RpcSurface, dataNames: Set): string { + let out = "declare global {\n"; + out += " /** The client-callable server surface. Calls ride toiljs RPC (transport TODO). */\n"; + out += " const Server: {\n"; + for (let i = 0, k = surface.remotes.length; i < k; ++i) { + let r = surface.remotes[i]; + out += " " + r.name + "(" + paramList(r.params, dataNames) + "): Promise<" + tsType(r.returns, dataNames) + ">;\n"; + } + for (let i = 0, k = surface.services.length; i < k; ++i) { + let s = surface.services[i]; + out += " readonly " + serviceKey(s.name) + ": {\n"; + for (let m = 0, mk = s.methods.length; m < mk; ++m) { + let method = s.methods[m]; + out += " " + method.name + "(" + paramList(method.params, dataNames) + "): Promise<" + tsType(method.returns, dataNames) + ">;\n"; + } + out += " };\n"; + } + if (surface.rest.length) { + out += " /** Generated HTTP fetch client for the `@rest` controllers. */\n"; + out += " readonly REST: {\n"; + for (let i = 0, k = surface.rest.length; i < k; ++i) { + let ctrl = surface.rest[i]; + out += " readonly " + ctrl.key + ": {\n"; + for (let m = 0, mk = ctrl.routes.length; m < mk; ++m) { + let sig = routeSig(ctrl.routes[m], dataNames); + out += " " + ctrl.routes[m].name + "(" + sig.argsParam + "): " + sig.ret + ";\n"; + } + out += " };\n"; + } + out += " };\n"; + } + out += " };\n"; + out += "}\n"; + return out; +} + +/** + * Emits the client-side `getUser()` for the `@user` type: it reads the readable + * `__Secure-toil_user` companion cookie the server set at login, base64url-decodes + * it, and runs the generated `@user` codec. Fully typed (returns the `@user` + * class) with NO type argument. Display-only: the server re-verifies the HttpOnly + * signed session on every `@auth` request, so this is never an authorization + * source. Emitted only when the program declares a `@user` class. + */ +function emitAuthClient(userType: string): string { + let out = "// ---- @user session client (reads the readable companion cookie) ----\n"; + out += "const __TOIL_USER_COOKIE = \"__Secure-toil_user\";\n\n"; + out += "function __toilReadCookie(name: string): string | null {\n"; + out += " if (typeof document === \"undefined\" || !document.cookie) return null;\n"; + out += " const pairs = document.cookie.split(\"; \");\n"; + out += " for (let i = 0; i < pairs.length; i++) {\n"; + out += " const eq = pairs[i].indexOf(\"=\");\n"; + out += " if (eq > 0 && pairs[i].slice(0, eq) === name) return pairs[i].slice(eq + 1);\n"; + out += " }\n"; + out += " return null;\n"; + out += "}\n\n"; + out += "function __toilB64UrlDecode(s: string): Uint8Array | null {\n"; + out += " try {\n"; + out += " let b = s.replace(/-/g, \"+\").replace(/_/g, \"/\");\n"; + out += " while (b.length % 4) b += \"=\";\n"; + out += " const bin = atob(b);\n"; + out += " const out = new Uint8Array(bin.length);\n"; + out += " for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n"; + out += " return out;\n"; + out += " } catch { return null; }\n"; + out += "}\n\n"; + out += "/**\n"; + out += " * The signed-in user, decoded from the readable `__Secure-toil_user` companion\n"; + out += " * cookie the server set at login, or `null`. Auto-typed to your `@user` class\n"; + out += " * (`" + userType + "`) with no type argument. DISPLAY-ONLY: the server re-verifies\n"; + out += " * the HttpOnly signed session on every `@auth` request; never trust this for\n"; + out += " * authorization (a client can forge it, fooling only its own UI).\n"; + out += " */\n"; + out += "export function getUser(): " + userType + " | null {\n"; + out += " const raw = __toilReadCookie(__TOIL_USER_COOKIE);\n"; + out += " if (raw === null) return null;\n"; + out += " const bytes = __toilB64UrlDecode(raw);\n"; + out += " if (bytes === null) return null;\n"; + out += " try { return " + userType + ".decode(bytes); } catch { return null; }\n"; + out += "}\n"; + return out; +} + +/** + * Builds the `server.ts` working module for `program`, or `null` when nothing is + * exposed (no `@data`/`@remote`/`@service`). `runtime` is the import specifier for + * the DataWriter/DataReader codec (e.g. `toiljs/io`). + */ +export function buildServerModule(program: Program, runtime: string): string | null { + let surface = collectSurface(program); + if (surface.data.length == 0 && surface.services.length == 0 && surface.remotes.length == 0 && surface.rest.length == 0) { + return null; + } + + let dataNames = new Set(); + for (let i = 0, k = surface.data.length; i < k; ++i) dataNames.add(surface.data[i].name); + + let out = "/* eslint-disable */\n"; + out += "// AUTO-GENERATED by toilscript, do not edit.\n"; + out += "// Working @data codec + the typed client-callable Server surface.\n"; + out += "// The Server proxy + transport are provided by toiljs.\n\n"; + + if (surface.data.length) { + out += "import { DataWriter, DataReader } from \"" + runtime + "\";\n\n"; + out += emitLimbHelpers(); + out += "\n"; + } + + for (let i = 0, k = surface.data.length; i < k; ++i) { + out += emitDataClass(surface.data[i], dataNames); + out += "\n"; + } + + let restClient = emitRestClient(surface, dataNames); + if (restClient.length) out += restClient + "\n"; + + if (surface.userType != null) out += emitAuthClient(surface.userType) + "\n"; + + out += emitServerSurface(surface, dataNames); + // Guarantee module scope (so `declare global` is valid) even with no @data exports. + out += "\nexport {};\n"; + + return out; +} diff --git a/src/asconfig.json b/src/toilconfig.json similarity index 52% rename from src/asconfig.json rename to src/toilconfig.json index 8618a21c41..1c5a35562c 100644 --- a/src/asconfig.json +++ b/src/toilconfig.json @@ -7,39 +7,40 @@ "exportStart": "_initialize", "exportRuntime": true, "initialMemory": 768, + "stackSize": 65536, "runtime": "incremental", "bindings": [ "esm" ], "stats": true }, "targets": { "debug": { - "outFile": "../build/assemblyscript.debug.wasm", - "textFile": "../build/assemblyscript.debug.wast", + "outFile": "../build/toilscript.debug.wasm", + "textFile": "../build/toilscript.debug.wast", "debug": true, "sourceMap": true }, "release": { - "outFile": "../build/assemblyscript.release.wasm", - "textFile": "../build/assemblyscript.release.wast", + "outFile": "../build/toilscript.release.wasm", + "textFile": "../build/toilscript.release.wast", "optimizeLevel": 3, "shrinkLevel": 0 }, "rtraced": { - "outFile": "../build/assemblyscript.rtraced.wasm", - "textFile": "../build/assemblyscript.rtraced.wast", + "outFile": "../build/toilscript.rtraced.wasm", + "textFile": "../build/toilscript.rtraced.wast", "debug": true, "use": "ASC_RTRACE=1", "runPasses": [] }, "debug-bootstrap": { - "outFile": "../build/assemblyscript.debug-bootstrap.wasm", - "textFile": "../build/assemblyscript.debug-bootstrap.wast", + "outFile": "../build/toilscript.debug-bootstrap.wasm", + "textFile": "../build/toilscript.debug-bootstrap.wast", "debug": true, "sourceMap": true }, "release-bootstrap": { - "outFile": "../build/assemblyscript.release-bootstrap.wasm", - "textFile": "../build/assemblyscript.release-bootstrap.wast", + "outFile": "../build/toilscript.release-bootstrap.wasm", + "textFile": "../build/toilscript.release-bootstrap.wast", "optimizeLevel": 3, "shrinkLevel": 0 } diff --git a/src/tokenizer.ts b/src/tokenizer.ts index 08a9e10dec..38b3760fb1 100644 --- a/src/tokenizer.ts +++ b/src/tokenizer.ts @@ -1,5 +1,5 @@ /** - * @fileoverview A TypeScript tokenizer modified for AssemblyScript. + * @fileoverview A TypeScript tokenizer modified for ToilScript. * * The `Tokenizer` scans over a source file and returns one syntactic token * at a time that the parser will combine to an abstract syntax tree. diff --git a/src/types.ts b/src/types.ts index 6a07f6fbc8..b9fbe518d8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ /** - * @fileoverview Mappings from AssemblyScript types to WebAssembly types. + * @fileoverview Mappings from ToilScript types to WebAssembly types. * @license Apache-2.0 */ diff --git a/std/README.md b/std/README.md index e662171659..8db0d821a0 100644 --- a/std/README.md +++ b/std/README.md @@ -1,6 +1,6 @@ Standard library ================ -Standard library components for use with `tsc` (portable) and `asc` (assembly). +Standard library components for use with `tsc` (portable) and `toilscript` (assembly). -Base configurations (.json) and definition files (.d.ts) are relevant to `tsc` only and not used by `asc`. +Base configurations (.json) and definition files (.d.ts) are relevant to `tsc` only and not used by `toilscript`. diff --git a/std/assembly.json b/std/assembly.json index 189ed19dc7..8f6bba25eb 100644 --- a/std/assembly.json +++ b/std/assembly.json @@ -7,6 +7,7 @@ "allowJs": false, "typeRoots": [ "types" ], "types": [ "assembly" ], + "plugins": [ { "name": "toilscript/std/ts-plugin.cjs" } ], "paths": { "*": [ "./assembly/*" diff --git a/std/assembly/array.ts b/std/assembly/array.ts index faa6d9b38c..025ada36fd 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -31,7 +31,9 @@ function ensureCapacity(array: usize, newSize: usize, alignLog2: u32, canGrow: b if (newData != oldData) { // oldData has been free'd store(array, newData, offsetof("buffer")); store(array, newData, offsetof("dataStart")); - __link(array, changetype(newData), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(array, changetype(newData), false); + } } store(array, newCapacity, offsetof("byteLength")); } @@ -133,7 +135,9 @@ export class Array { } store(this.dataStart + (index << alignof()), value); if (isManaged()) { - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } } @@ -153,7 +157,9 @@ export class Array { fill(value: T, start: i32 = 0, end: i32 = i32.MAX_VALUE): Array { if (isManaged()) { FILL(this.dataStart, this.length_, changetype(value), start, end); - __link(changetype(this), changetype(value), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), false); + } } else { FILL(this.dataStart, this.length_, value, start, end); } @@ -209,7 +215,9 @@ export class Array { ensureCapacity(changetype(this), len, alignof()); if (isManaged()) { store(this.dataStart + (oldLen << alignof()), changetype(value)); - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } else { store(this.dataStart + (oldLen << alignof()), value); } @@ -230,7 +238,9 @@ export class Array { for (let offset: usize = 0; offset < thisSize; offset += sizeof()) { let ref = load(thisStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } outStart += thisSize; let otherStart = other.dataStart; @@ -238,7 +248,9 @@ export class Array { for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { let ref = load(otherStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } } else { memory.copy(outStart, this.dataStart, thisSize); @@ -288,7 +300,9 @@ export class Array { let result = fn(load(this.dataStart + (i << alignof())), i, this); store(outStart + (i << alignof()), result); if (isManaged()) { - __link(changetype(out), changetype(result), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), changetype(result), true); + } } } return out; @@ -364,7 +378,9 @@ export class Array { ); store(ptr, value); if (isManaged()) { - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } this.length_ = len; return len; @@ -384,7 +400,9 @@ export class Array { while (off < end) { let ref = load(thisBase + off); store(sliceBase + off, ref); - __link(changetype(slice), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(slice), ref, true); + } off += sizeof(); } } else { @@ -472,7 +490,9 @@ export class Array { store(changetype(outArray), byteLength, offsetof("byteLength")); store(changetype(outArray), changetype(outBuffer), offsetof("dataStart")); store(changetype(outArray), changetype(outBuffer), offsetof("buffer")); - __link(changetype(outArray), changetype(outBuffer), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(outArray), changetype(outBuffer), false); + } // set the elements let resultOffset: usize = 0; @@ -498,7 +518,9 @@ export class Array { if (isManaged>()) { for (let i = 0; i < size; ++i) { let ref = load(changetype(outBuffer) + (i << usize(alignof>()))); - __link(changetype(outBuffer), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(outBuffer), ref, true); + } } } @@ -512,15 +534,17 @@ export class Array { // RT integration @unsafe private __visit(cookie: u32): void { - if (isManaged()) { - let cur = this.dataStart; - let end = cur + (this.length_ << alignof()); - while (cur < end) { - let val = load(cur); - if (val) __visit(val, cookie); - cur += sizeof(); + if (ASC_RUNTIME != Runtime.Memory) { + if (isManaged()) { + let cur = this.dataStart; + let end = cur + (this.length_ << alignof()); + while (cur < end) { + let val = load(cur); + if (val) __visit(val, cookie); + cur += sizeof(); + } } + __visit(changetype(this.buffer), cookie); } - __visit(changetype(this.buffer), cookie); } } diff --git a/std/assembly/bignum.ts b/std/assembly/bignum.ts new file mode 100644 index 0000000000..ddf06fd4a5 --- /dev/null +++ b/std/assembly/bignum.ts @@ -0,0 +1,18 @@ +// Big integer types (u128 / i128 / u256), implemented under ./bignum +// (Apache-2.0; see ./bignum/LICENSE). +// +// This file is a top-level standard-library entry, so toilscript globalizes its +// named re-exports the same way it does Array/Map/String. That makes u128, i128 +// and u256 usable with no import, as native types: +// +// let a = u128.fromU64(40) + u128.fromU64(2); +// let b = u256.fromU128(a); +// +// The vendored sources are unmodified; only this thin globalizer is toilscript's. +// i256 is the signed-256 backing type of the family (u128/i128 convert to it), +// so it is globalized too for a self-consistent surface. + +export { u128 } from "./bignum/integer/u128"; +export { i128 } from "./bignum/integer/i128"; +export { u256 } from "./bignum/integer/u256"; +export { i256 } from "./bignum/integer/i256"; diff --git a/std/assembly/bignum/LICENSE b/std/assembly/bignum/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/std/assembly/bignum/LICENSE @@ -0,0 +1,201 @@ + 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. diff --git a/std/assembly/bignum/NOTICE b/std/assembly/bignum/NOTICE new file mode 100644 index 0000000000..ccd418febb --- /dev/null +++ b/std/assembly/bignum/NOTICE @@ -0,0 +1,7 @@ +The files in this directory (integer/, fixed/, globals.ts, utils.ts, index.ts) +are an audited 128/256-bit integer implementation, licensed Apache-2.0 (see +./LICENSE). They are bundled into the toilscript standard library so the +big-integer types are available natively. + +../bignum.ts is the toilscript globalizer: it re-exports u128/i128/u256/i256 +from a top-level library entry so they are promoted to global types. diff --git a/std/assembly/bignum/fixed/fp128.ts b/std/assembly/bignum/fixed/fp128.ts new file mode 100644 index 0000000000..2d3856ca2d --- /dev/null +++ b/std/assembly/bignum/fixed/fp128.ts @@ -0,0 +1,58 @@ +import { i128 } from '../integer/i128'; +import { u128 } from '../integer/u128'; + +// Support only this fractions: +// fp128 => 8 bits (~ 2 decimal digits) +// fp128 => 16 bits (~ 4 decimal digits) +// fp128 => 24 bits (~ 7 decimal digits) +// fp128 => 32 bits (~ 9 decimal digits) +// fp128 => 40 bits (~ 12 decimal digits) +// fp128 => 48 bits (~ 14 decimal digits) +// fp128 => 56 bits (~ 16 decimal digits) +// fp128 => 64 bits (~ 19 decimal digits) +// fp128 => 72 bits (~ 21 decimal digits) +// fp128 => 80 bits (~ 24 decimal digits) +// fp128 => 88 bits (~ 26 decimal digits) +// fp128 => 96 bits (~ 28 decimal digits) +// fp128 => 104 bits (~ 31 decimal digits) +// fp128 => 112 bits (~ 33 decimal digits) +// fp128 => 120 bits (~ 36 decimal digits) + +export class fp128 { + + static readonly Zero: fp128 = new fp128(0); + static readonly One: fp128 = new fp128(1); + + protected value: i128 = i128.Zero; + + constructor(lo: u64 = 0, hi: i64 = 0) { + this.value.lo = lo; + this.value.hi = hi; + } + + @inline + get intBits(): i32 { + return 128 - this.fractBits; + } + + @inline + get fractBits(): i32 { + if (isReference()) { + return 8 * offsetof(); + } else { + return 8 * sizeof(); + } + } + + @inline + get int(): i128 { + return this.value >>> this.fractBits; + } + + @inline + get fract(): u128 { + return (chagetype(this.value)) << this.intBits; + } + + // TODO +} diff --git a/std/assembly/bignum/fixed/fp256.ts b/std/assembly/bignum/fixed/fp256.ts new file mode 100644 index 0000000000..dd3ea234ed --- /dev/null +++ b/std/assembly/bignum/fixed/fp256.ts @@ -0,0 +1,9 @@ +import { i256 } from '../integer/i256'; + +export class fp256 { + + constructor(public value: i256 = i256.Zero) { + } + + // TODO +} diff --git a/std/assembly/bignum/fixed/index.ts b/std/assembly/bignum/fixed/index.ts new file mode 100644 index 0000000000..ac39aa9d5e --- /dev/null +++ b/std/assembly/bignum/fixed/index.ts @@ -0,0 +1,38 @@ +import { u128 } from "../integer/u128"; +import { fp128 } from "./fp128"; +import { fp256 } from "./fp256"; +import { u104, u112, u120, u136, u144, u152, u160, u24, u40, u48, u56, u72, u80, u88, u96, } from './types'; + +export type fp128x8 = fp128; +export type fp128x16 = fp128; +export type fp128x24 = fp128; +export type fp128x32 = fp128; +export type fp128x40 = fp128; +export type fp128x48 = fp128; +export type fp128x56 = fp128; +export type fp128x64 = fp128; +export type fp128x72 = fp128; +export type fp128x80 = fp128; + +export type fp256x8 = fp256; +export type fp256x16 = fp256; +export type fp256x24 = fp256; +export type fp256x32 = fp256; +export type fp256x40 = fp256; +export type fp256x48 = fp256; +export type fp256x56 = fp256; +export type fp256x64 = fp256; +export type fp256x72 = fp256; +export type fp256x80 = fp256; +export type fp256x88 = fp256; +export type fp256x96 = fp256; +export type fp256x104 = fp256; +export type fp256x112 = fp256; +export type fp256x120 = fp256; +export type fp256x128 = fp256; +export type fp256x136 = fp256; +export type fp256x144 = fp256; +export type fp256x152 = fp256; +export type fp256x160 = fp256; + +export { fp128, fp256 }; diff --git a/std/assembly/bignum/fixed/safe/fp128.ts b/std/assembly/bignum/fixed/safe/fp128.ts new file mode 100644 index 0000000000..898013a422 --- /dev/null +++ b/std/assembly/bignum/fixed/safe/fp128.ts @@ -0,0 +1,3 @@ +export namespace safe { + // TODO +} diff --git a/std/assembly/bignum/fixed/safe/fp256.ts b/std/assembly/bignum/fixed/safe/fp256.ts new file mode 100644 index 0000000000..898013a422 --- /dev/null +++ b/std/assembly/bignum/fixed/safe/fp256.ts @@ -0,0 +1,3 @@ +export namespace safe { + // TODO +} diff --git a/std/assembly/bignum/fixed/types.ts b/std/assembly/bignum/fixed/types.ts new file mode 100644 index 0000000000..b9b5bc9bb6 --- /dev/null +++ b/std/assembly/bignum/fixed/types.ts @@ -0,0 +1,103 @@ +// u8 +// u16 + +export class u24 { + private _0: u16 + private _1: u8 +} + +// u32 + +export class u40 { + private _0: u32 + private _1: u8 +} + +export class u48 { + private _0: u32 + private _1: u16 +} + +export class u56 { + private _0: u32 + private _1: u24 +} + +// u64 + +export class u72 { + private _0: u64 + private _1: u8 +} + +export class u80 { + private _0: u64 + private _1: u16 +} + +export class u88 { + private _0: u64 + private _1: u24 +} + +export class u96 { + private _0: u64 + private _1: u32 +} + +export class u104 { + private _0: u64 + private _1: u40 +} + +export class u112 { + private _0: u64 + private _1: u48 +} + +export class u120 { + private _0: u112 + private _1: u8 +} + +// u128 + +export class u136 { + private _0: u120 + private _1: u16 +} + +export class u144 { + private _0: u136 + private _1: u8 +} + +export class u152 { + private _0: u144 + private _1: u8 +} + +export class u160 { + private _0: u152 + private _1: u8 +} + +export class u168 { + private _0: u160 + private _1: u8 +} + +export class u176 { + private _0: u168 + private _1: u8 +} + +export class u184 { + private _0: u176 + private _1: u8 +} + +export class u192 { + private _0: u184 + private _1: u8 +} diff --git a/std/assembly/bignum/globals.ts b/std/assembly/bignum/globals.ts new file mode 100644 index 0000000000..7243f0f4f5 --- /dev/null +++ b/std/assembly/bignum/globals.ts @@ -0,0 +1,546 @@ +import { u128, u256 } from "./integer"; + +@lazy export var __divmod_quot_hi: u64 = 0; +@lazy export var __divmod_rem_lo: u64 = 0; +@lazy export var __divmod_rem_hi: u64 = 0; + +// used for returning low and high part of __mulq64, __multi3 etc +@lazy export var __res128_hi: u64 = 0; + +// used for returning 0 or 1 +@lazy export var __carry: u64 = 0; +@lazy export var __u256carry: u64 = 0; +@lazy export var __u256carrySub: u64 = 0; + +/** + * Convert 128-bit unsigned integer to 64-bit float + * @param lo lower 64-bit part of unsigned 128-bit integer + * @param hi higher 64-bit part of unsigned 128-bit integer + * @return 64-bit float result + */ +// @ts-ignore: decorator +@global +export function __floatuntidf(lo: u64, hi: u64): f64 { + // __floatuntidf ported from LLVM sources + if (!(lo | hi)) return 0.0; + + var v = new u128(lo, hi); + var sd = 128 - __clz128(lo, hi); + var e = sd - 1; + + if (sd > 53) { + if (sd != 55) { + if (sd == 54) { + v = u128.shl(v, 1); + } else { + v = u128.or( + u128.shr(v, sd - 55), + u128.fromBool(u128.and(v, u128.shr(u128.Max, 128 + 55 - sd)).toBool()) + ); + } + } + + v.lo |= (v.lo & 4) >> 2; + v.preInc(); + + v = u128.shr(v, 2); + + if (v.lo & (1 << 53)) { + v = u128.shr(v, 1); + ++e; + } + + } else { + v = u128.shl(v, 53 - sd); + } + + var w: u64 = u128.shr(v, 32).lo & 0x000FFFFF; + var u: u64 = (((e + 1023) << 20) | w) << 32; + return reinterpret(u | (v.lo & 0xFFFFFFFF)); +} + + +/** + * Adds two 64-bit unsigned integers `a` and `b` along with a carry-in value. + * Sets the global `__carry2` variable to indicate whether an overflow occurred. + * @param {u64} a - The first 64-bit unsigned integer. + * @param {u64} b - The second 64-bit unsigned integer. + * @param {u64} carryIn - Carry-in value (0 or 1). + * @returns {u64} - The 64-bit result of the addition. + */ +@inline +export function add64Local(a: u64, b: u64, carryIn: u64): u64 { + let tmp = a + carryIn; + let carry = tmp < a ? 1 : 0; + let sum = tmp + b; + carry += sum < tmp ? 1 : 0; + __u256carry = carry; + return sum; +} + +/** + * Subtracts the 64-bit unsigned integer `b` from `a` along with a borrow-in value. + * Sets the global `__carry2` variable to indicate whether a borrow occurred. + * @param {u64} a - The minuend (64-bit unsigned integer). + * @param {u64} b - The subtrahend (64-bit unsigned integer). + * @param {u64} borrowIn - Borrow-in value (0 or 1). + * @returns {u64} - The 64-bit result of the subtraction. + */ +@inline +export function sub64(a: u64, b: u64, borrowIn: u64): u64 { + let tmp = a - b; + let borrow = tmp > a ? 1 : 0; + let diff = tmp - borrowIn; + borrow += diff > tmp ? 1 : 0; + __u256carrySub = borrow; + return diff; +} + +// @ts-ignore: decorator +@global +export function __umulh64(a: u64, b: u64): u64 { + var u = a & 0xFFFFFFFF; + a >>= 32; + var v = b & 0xFFFFFFFF; + b >>= 32; + + var uv = u * v; + uv = a * v + (uv >> 32); + var w0 = (u * b) + (uv & 0xFFFFFFFF); + return a * b + (uv >> 32) + (w0 >> 32); +} + +// @ts-ignore: decorator +@global +export function __umulq64(a: u64, b: u64): u64 { + var u = a & 0xFFFFFFFF; + a >>= 32; + var v = b & 0xFFFFFFFF; + b >>= 32; + + var uv = u * v; + var w0 = uv & 0xFFFFFFFF; + uv = a * v + (uv >>> 32); + var w1 = uv >>> 32; + uv = u * b + (uv & 0xFFFFFFFF); + + __res128_hi = a * b + w1 + (uv >>> 32); + return (uv << 32) | w0; +} + +// __umul64Hop computes (hi * 2^64 + lo) = z + (x * y) +// @ts-ignore: decorator +@inline +export function __umul64Hop(z: u64, x: u64, y: u64): u64 { + var lo = __umulq64(x, y); + lo = __uadd64(lo, z); + var hi = __res128_hi + __carry; + __res128_hi = hi; + return lo +} + +// __umul64Step computes (hi * 2^64 + lo) = z + (x * y) + carry. +// @ts-ignore: decorator +@inline +export function __umul64Step(z: u64, x: u64, y: u64, carry: u64): u64 { + var lo = __umulq64(x, y) + lo = __uadd64(lo, carry); + var hi = __uadd64(__res128_hi, 0, __carry); + lo = __uadd64(lo, z); + hi += __carry; + __res128_hi = hi; + return lo +} + +// __uadd64 returns the sum with carry of x, y and carry: sum = x + y + carry. +// The carry input must be 0 or 1; otherwise the behavior is undefined. +// The carryOut output is guaranteed to be 0 or 1. +// @ts-ignore: decorator +@inline +export function __uadd64(x: u64, y: u64, carry: u64 = 0): u64 { + var sum = x + y + carry + // // The sum will overflow if both top bits are set (x & y) or if one of them + // // is (x | y), and a carry from the lower place happened. If such a carry + // // happens, the top bit will be 1 + 0 + 1 = 0 (& ~sum). + __carry = ((x & y) | ((x | y) & ~sum)) >>> 63 + return sum; +} + +// 64x64 => 128 bits +@inline +function mul64To128(x: u64, y: u64): u128 { + let lo = __umulq64(x, y); // sets __res128_hi + let hi = __res128_hi; + return new u128(lo, hi); +} + +/** + * A correct 256×256 -> 256 multiply (mod 2^256). + * We do standard "schoolbook" multiplication for each 64-bit limb, + * skipping products that shift above 255 bits (they vanish mod 2^256). + */ +@global +export function __mul256( + ax0: u64, ax1: u64, ax2: u64, ax3: u64, + bx0: u64, bx1: u64, bx2: u64, bx3: u64 +): u256 { + let result = new u256(); + let a = [ax0, ax1, ax2, ax3]; + let b = [bx0, bx1, bx2, bx3]; + + // For each (i,j), partial = a[i]*b[j], shift = 64*(i+j). + // If shift >= 256, that partial is 0 mod 2^256. + // Otherwise shift partial, add to result. + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + let shift = (i + j) << 6; // 64*(i+j) + if (shift >= 256) continue; + let p128 = mul64To128(a[i], b[j]); // 128-bit partial product + // convert to u256 + let part = new u256(p128.lo, p128.hi, 0, 0); + // shift left by 'shift' bits + if (shift != 0) { + part = u256.shl(part, shift); + } + // add to accumulator + result = result + part; + } + } + + return result; +} + +// @ts-ignore: decorator +@global +export function __multi3(al: u64, ah: u64, bl: u64, bh: u64): u64 { + var u = al, v = bl; + var w: u64, k: u64; + + var u1 = u & 0xFFFFFFFF; + u >>= 32; + var v1 = v & 0xFFFFFFFF; + v >>= 32; + var t = u1 * v1; + var w1 = t & 0xFFFFFFFF; + + t = u * v1 + (t >> 32); + k = t & 0xFFFFFFFF; + w = t >> 32; + t = u1 * v + k; + + var lo = (t << 32) | w1; + var hi = u * v + w; + hi += ah * bl; + hi += al * bh; + hi += t >> 32; + + __res128_hi = hi; + return lo; +} + +// @ts-ignore: decorator +@global +export function __floatuntfdi(value: f64): u64 { + var u = reinterpret(value); + + // if (value < -1.7014118346046e38) { // -(2^127-1) + if (value < reinterpret(0xC7F0000000000000)) { // -(2^128-1) + // __float_u128_hi = -1; // for i128 + __res128_hi = 0; + // overflow negative + return 0; + // } else if (value < -9.2233720368547e18) { // -2^63-1 // for i128 + } else if (value < reinterpret(0xC3F0000000000000)) { // // -(2^64-1) + let lo: u64, hi: u64, m: u64; + + m = (u & 0x000FFFFFFFFFFFFF) | (1 << 52); + u = (u & 0x7FFFFFFFFFFFFFFF) >> 52; + + u -= 1075; + if (u > 64) { + lo = 0; + hi = m << (u - 64); + } else { + lo = m << u; + hi = m >> (64 - u); + } + // Convert to 2's complement for correct negative representation + lo = ~lo; + hi = ~hi; + lo += 1; + if (lo == 0) hi += 1; // carry to high part + + __res128_hi = hi; + return lo; + // } else if (value < 9.2233720368547e18) { // 2^63-1 // for i128 + } else if (value < reinterpret(0x43F0000000000000)) { // 2^64-1 + // __float_u128_hi = (value < 0) ? -1 : 0; // for int + __res128_hi = 0; + // fit in a u64 + return value; + // } else if (value < 1.7014118346046e38) { + } else if (value < reinterpret(0x47F0000000000000)) { // 2^128-1 + let lo: u64, hi: u64, m: u64; + + m = (u & 0x000FFFFFFFFFFFFF) | (1 << 52); + u = (u & 0x7FFFFFFFFFFFFFFF) >> 52; + u -= 1075; + if (u > 64) { + lo = 0; + hi = m << (u - 64); + } else { + lo = m << u; + hi = m >> (64 - u); + } + __res128_hi = hi; + return lo; + } else { + // overflow positive + __res128_hi = -1; // 0x7FFFFFFFFFFFFFFF for i128 + return -1; + } +} + +/** + * Count leading zeros in a 64-bit unsigned integer `x`, returning i32 in [0..64]. + * If x == 0, returns 64. + */ +function clz64(x: u64): i32 { + if (x == 0) return 64; + + let n: i32 = 0; + // Check high half [ bits 63..32 ] + if ((x & 0xFFFFFFFF00000000) == 0) { + n += 32; + x <<= 32; // shift left so next checks are for the upper bits + } + // Check bits [63..48] + if ((x & 0xFFFF000000000000) == 0) { + n += 16; + x <<= 16; + } + // Check bits [63..56] + if ((x & 0xFF00000000000000) == 0) { + n += 8; + x <<= 8; + } + // Check bits [63..60] + if ((x & 0xF000000000000000) == 0) { + n += 4; + x <<= 4; + } + // Check bits [63..62] + if ((x & 0xC000000000000000) == 0) { + n += 2; + x <<= 2; + } + // Check bit [63] + if ((x & 0x8000000000000000) == 0) { + n += 1; + } + return n; +} + +/** + * Count trailing zeros in a 64-bit unsigned integer `x`, returning i32 in [0..64]. + * If x == 0, returns 64. + */ +function ctz64(x: u64): i32 { + if (x == 0) return 64; + + let n: i32 = 0; + // Check low half [bits 31..0] + if ((x & 0xFFFFFFFF) == 0) { + n += 32; + x >>= 32; + } + // Check bits [15..0] + if ((x & 0xFFFF) == 0) { + n += 16; + x >>= 16; + } + // Check bits [7..0] + if ((x & 0xFF) == 0) { + n += 8; + x >>= 8; + } + // Check bits [3..0] + if ((x & 0xF) == 0) { + n += 4; + x >>= 4; + } + // Check bits [1..0] + if ((x & 0x3) == 0) { + n += 2; + x >>= 2; + } + // Check bit [0] + if ((x & 0x1) == 0) { + n += 1; + } + return n; +} + +/** + * Count leading zeros in a 128-bit integer [hi:lo], returning i32 in [0..128]. + * If both hi and lo are 0, returns 128. + * + * hi is signed in i128, but we interpret it as unsigned here. + */ +// @ts-ignore: decorator +@global @inline +export function __clz128(lo: u64, hi: i64): i32 { + let h: u64 = hi; // reinterpret hi as unsigned + if (h == 0) { + // If hi is 0, the leading zeros are "64 plus however many are in lo" + return 64 + i64.clz(lo); + } else { + // The top 64 bits are set => just measure their leading zeros + return i64.clz(h); + } +} + +/** + * Count trailing zeros in a 128-bit integer [hi:lo], returning i32 in [0..128]. + * If both hi and lo are 0, returns 128. + * + * For i128 we typically treat hi as signed, but ctz is purely bitwise, so we + * can pass it as u64 as well. + */ +// @ts-ignore: decorator +@global @inline +export function __ctz128(lo: u64, hi: u64): i32 { + if (lo == 0) { + // Otherwise, ctz is 64 plus ctz(hi) + return 64 + i64.ctz(hi); + } else { + // If the lower 64 bits are non-zero, measure ctz(lo) + return i64.ctz(lo); + } +} + +// @ts-ignore: decorator +@global +export function __udivmod128(alo: u64, ahi: u64, blo: u64, bhi: u64): u64 { + var bzn = __clz128(blo, bhi); // N + + // b == 0 + if (bzn == 128) { + throw new RangeError("Division by zero"); // division by zero + } + + // var azn = __clz128(alo, ahi); // M + var btz = __ctz128(blo, bhi); // N + + // a == 0 + if (!(alo | ahi)) { + __divmod_quot_hi = 0; + __divmod_rem_lo = 0; + __divmod_rem_hi = 0; + return 0; + } + + // a / 1 + if (bzn == 127) { + __divmod_quot_hi = ahi; + __divmod_rem_lo = 0; + __divmod_rem_hi = 0; + return alo; + } + + // a == b + if (alo == blo && ahi == bhi) { + __divmod_quot_hi = 0; + __divmod_rem_lo = 0; + __divmod_rem_hi = 0; + return 1; + } + + if (!(ahi | bhi)) { + __divmod_quot_hi = 0; + __divmod_rem_hi = 0; + // if `b.lo` is power of two + if (!(blo & (blo - 1))) { + __divmod_rem_lo = alo & (blo - 1); + return alo >> btz; + } else { + let dlo = alo / blo; + __divmod_rem_lo = alo - dlo * blo; + return dlo; + } + } + return __udivmod128core(alo, ahi, blo, bhi); +} + +function __udivmod128core(alo: u64, ahi: u64, blo: u64, bhi: u64): u64 { + var r = new u128(alo, ahi); + var d = new u128(blo, bhi); + var q = new u128(0, 0); + + // Standard division by shifting + var leadingZeros = __clz128(blo, bhi) - __clz128(alo, ahi); + + if (leadingZeros < 0) { + __divmod_quot_hi = 0; + __divmod_rem_lo = alo; + __divmod_rem_hi = ahi; + return 0; + } + + var dShift = u128.shl(d, leadingZeros); + + for (let i = 0; i <= leadingZeros; i++) { + q = u128.shl(q, 1); + if (r >= dShift) { + r -= dShift; + q = u128.add(q, u128.One); + } + dShift = u128.shr(dShift, 1); + } + + __divmod_quot_hi = q.hi; + __divmod_rem_lo = r.lo; + __divmod_rem_hi = r.hi; + return q.lo; +} + +// @ts-ignore: decorator +@global +export function __udivmod128_10(lo: u64, hi: u64): u64 { + if (hi == 0) { + __divmod_quot_hi = 0; + let q = lo / 10; + __divmod_rem_lo = lo - (q * 10); + __divmod_rem_hi = 0; + return q; + } + + // High part division + let q_hi = hi / 10; + let r_hi = hi - (q_hi * 10); + + // Low part chunking to avoid 128-bit math + // r_hi becomes the high bits for the next division + let lo_hi = lo >>> 32; + let lo_lo = lo & 0xFFFFFFFF; + + // Divide upper half of lo (plus carry from hi) + let t1 = (r_hi << 32) | lo_hi; + let q1 = t1 / 10; + let r1 = t1 - (q1 * 10); + + // Divide lower half of lo (plus carry from above) + let t2 = (r1 << 32) | lo_lo; + let q2 = t2 / 10; + let r2 = t2 - (q2 * 10); + + // Reassemble quotient + // q1 is known to fit in 32 bits because max t1 < 10 * 2^32 + let q_lo = (q1 << 32) | q2; + + __divmod_quot_hi = q_hi; + __divmod_rem_lo = r2; + __divmod_rem_hi = 0; + + return q_lo; +} diff --git a/std/assembly/bignum/index.ts b/std/assembly/bignum/index.ts new file mode 100644 index 0000000000..40a67bb7d4 --- /dev/null +++ b/std/assembly/bignum/index.ts @@ -0,0 +1 @@ +export * from "./integer"; diff --git a/std/assembly/bignum/integer/i128.ts b/std/assembly/bignum/integer/i128.ts new file mode 100644 index 0000000000..f0107dee29 --- /dev/null +++ b/std/assembly/bignum/integer/i128.ts @@ -0,0 +1,423 @@ +import { u128 } from './u128'; +import { i256 } from './i256'; +import { u256 } from './u256'; + +import { __clz128, __ctz128, } from '../globals'; + +import { atou128 } from '../utils'; + +/** + * 128-bit signed integer in two's complement representation. + * The `hi` field is signed, storing sign bits for negative values. + */ +export class i128 { + + constructor(public lo: u64 = 0, public hi: i64 = 0) { + } + + @inline static get Zero(): i128 { + return new i128(); + } + + @inline static get One(): i128 { + return new i128(1, 0); + } + + @inline static get Min(): i128 { + return new i128(0, 0x8000000000000000); + } + + @inline static get Max(): i128 { + return new i128(u64.MAX_VALUE, 0x7FFFFFFFFFFFFFFF); + } + + // Construct from decimal or hex string + @inline + static fromString(value: string, radix: i32 = 10): i128 { + // If the string is prefixed with "-" we rely on atou128 + two’s complement wrap + // in the final reinterpret. + return changetype(atou128(value, radix)); + } + + @inline + static fromI256(value: i256): i128 { + // Truncates top bits (value.hi1, value.hi2) + return new i128(value.lo1, value.lo2); + } + + @inline + static fromU256(value: u256): i128 { + // Also truncation + return new i128(value.lo1, value.lo2); + } + + @inline + static fromI128(value: i128): i128 { + return new i128(value.lo, value.hi); + } + + @inline + static fromU128(value: u128): i128 { + return new i128(value.lo, value.hi); + } + + @inline + static fromI64(value: i64): i128 { + return new i128(value, value >> 63); + } + + @inline + static fromU64(value: u64): i128 { + return new i128(value, 0); + } + + @inline + static fromF64(value: f64): i128 { + let i = value; // convert f64 -> i64 (round/truncate) + return new i128(i, i >> 63); + } + + @inline + static fromF32(value: f32): i128 { + let i = value; // or then sign-extend + return new i128(i, i >> 63); + } + + @inline + static fromI32(value: i32): i128 { + return new i128(value, (value >> 31)); + } + + @inline + static fromU32(value: u32): i128 { + return new i128(value, 0); + } + + @inline + static fromBits(lo1: i32, lo2: i32, hi1: i32, hi2: i32): i128 { + let lo = ((lo2) << 32) | ((lo1) & 0xffffffff); + let hi = ((hi2) << 32) | ((hi1) & 0xffffffff); + return new i128(lo, hi); + } + + @inline + static fromBytes(array: T, bigEndian: bool = false): i128 { + if (array instanceof u8[]) { + return bigEndian + // @ts-ignore + ? i128.fromBytesBE(array) + : i128.fromBytesLE(array); + } else if (array instanceof Uint8Array) { + return bigEndian + ? i128.fromUint8ArrayBE(array) + : i128.fromUint8ArrayLE(array); + } else { + throw new TypeError("Unsupported generic type"); + } + } + + @inline + static fromBytesLE(array: u8[]): i128 { + return i128.fromUint8ArrayLE(changetype(array)); + } + + @inline + static fromBytesBE(array: u8[]): i128 { + return i128.fromUint8ArrayBE(changetype(array)); + } + + @inline + static fromUint8ArrayLE(array: Uint8Array): i128 { + assert(array.length && (array.length & 15) == 0); + let buffer = array.dataStart; + return new i128( + load(buffer, 0 * sizeof()), + load(buffer, 1 * sizeof()) + ); + } + + static fromUint8ArrayBE(array: Uint8Array): i128 { + assert(array.length && (array.length & 15) == 0); + let buffer = array.dataStart; + return new i128( + bswap(load(buffer, 1 * sizeof())), + bswap(load(buffer, 0 * sizeof())) + ); + } + + /** + * Create 128-bit signed integer from a generic type T + * @param value + * @return 128-bit signed integer + */ + @inline + static from(value: T): i128 { + if (value instanceof bool) return i128.fromU64(value); + else if (value instanceof i8) return i128.fromI64(value); + else if (value instanceof u8) return i128.fromU64(value); + else if (value instanceof i16) return i128.fromI64(value); + else if (value instanceof u16) return i128.fromU64(value); + else if (value instanceof i32) return i128.fromI64(value); + else if (value instanceof u32) return i128.fromU64(value); + else if (value instanceof i64) return i128.fromI64(value); + else if (value instanceof u64) return i128.fromU64(value); + else if (value instanceof f32) return i128.fromF64(value); + else if (value instanceof f64) return i128.fromF64(value); + else if (value instanceof i128) return i128.fromI128(value); + else if (value instanceof u128) return i128.fromU128(value); + else if (value instanceof i256) return i128.fromI256(value); + else if (value instanceof u256) return i128.fromU256(value); + else if (value instanceof u8[]) return i128.fromBytes(value); + else throw new TypeError("Unsupported generic type"); + } + + @inline @operator.prefix('!') + static isEmpty(value: i128): bool { + return value.isZero(); + } + + @inline @operator('|') + static or(a: i128, b: i128): i128 { + return new i128(a.lo | b.lo, a.hi | b.hi); + } + + @inline @operator('^') + static xor(a: i128, b: i128): i128 { + return new i128(a.lo ^ b.lo, a.hi ^ b.hi); + } + + @inline @operator('&') + static and(a: i128, b: i128): i128 { + return new i128(a.lo & b.lo, a.hi & b.hi); + } + + @inline @operator('<<') + static shl(value: i128, shift: i32): i128 { + shift &= 127; + 0xFFFFFFFFFFFFFFFF + if (!shift) return value; + + let lo = value.lo; + let hi = value.hi; + if (shift < 64) { + let newLo = lo << shift; + let newHi = (hi << shift) | i64(lo >>> (64 - shift)); + return new i128(newLo, newHi); + } else { + // shift >= 64 + let s = shift - 64; + if (s == 0) { + // exactly 64 + return new i128(0, lo as i64); + } else { + // 1..63 + return new i128(0, (lo << s) as i64); + } + } + } + + @inline @operator('>>>') + static shr_u(value: i128, shift: i32): i128 { + // an unsigned right shift of a *signed* 128 + shift &= 127; + if (!shift) return value; + + let lo = value.lo; + let hi = u64(value.hi); // reinterpret sign as high bits + + if (shift < 64) { + let newLo = (lo >>> shift) | (hi << (64 - shift)); + let newHi = hi >>> shift; + return new i128(newLo, newHi as i64); + } else { + // shift >= 64 + let s = shift - 64; + if (s == 0) { + return new i128(hi, 0); + } else { + // 1..63 + return new i128(hi >>> s, 0); + } + } + } + + @inline @operator('+') + static add(a: i128, b: i128): i128 { + let lo = a.lo + b.lo; + let carry = (lo < a.lo) ? 1 : 0; + let hi = a.hi + b.hi + (carry as i64); + return new i128(lo, hi); + } + + @inline @operator('-') + static sub(a: i128, b: i128): i128 { + let lo = a.lo - b.lo; + let borrow = (lo > a.lo) ? 1 : 0; + let hi = a.hi - b.hi - (borrow as i64); + return new i128(lo, hi); + } + + @inline @operator('==') + static eq(a: i128, b: i128): bool { + return a.hi == b.hi && a.lo == b.lo; + } + + @inline @operator('!=') + static ne(a: i128, b: i128): bool { + return !i128.eq(a, b); + } + + @inline @operator('<') + static lt(a: i128, b: i128): bool { + let ah = a.hi, bh = b.hi; + // If hi parts differ, that decides the sign. Otherwise compare lo. + return ah == bh ? a.lo < b.lo : ah < bh; + } + + @inline @operator('>') + static gt(a: i128, b: i128): bool { + return b < a; + } + + @inline @operator('<=') + static le(a: i128, b: i128): bool { + return !i128.gt(a, b); + } + + @inline @operator('>=') + static ge(a: i128, b: i128): bool { + return !i128.lt(a, b); + } + + @inline + static ord(a: i128, b: i128): i32 { + // Return -1, 0, 1 + if (a == b) return 0; + return i128.lt(a, b) ? -1 : 1; + } + + @inline + static popcnt(value: i128): i32 { + return (popcnt(value.lo) + popcnt(value.hi)); + } + + @inline + static clz(value: i128): i32 { + return __clz128(value.lo, value.hi); + } + + @inline + static ctz(value: i128): i32 { + return __ctz128(value.lo, value.hi); + } + + @inline + static abs(value: i128): i128 { + // if negative, return -value + return value.isNeg() ? value.neg() : value; + } + + @inline + isPos(): bool { + return this.hi >= 0; + } + + @inline + isNeg(): bool { + return this.hi < 0; + } + + @inline + isZero(): bool { + return !(this.lo | this.hi); + } + + @inline @operator.prefix('~') + not(): i128 { + return new i128(~this.lo, ~this.hi); + } + + @inline @operator.prefix('+') + pos(): i128 { + return this; + } + + @inline @operator.prefix('-') + neg(): i128 { + // two's complement: ~x + 1 + let nlo = ~this.lo; + let nhi = ~this.hi; + + let sum = nlo + 1; + let carry = (sum < nlo) ? 1 : 0; + let hi2 = nhi + (carry as i64); + + return new i128(sum, hi2); + } + + /** + * Decimal (or `radix`) string. Sign + unsigned magnitude: negate (two's complement) + * and reinterpret as u128, which is layout-identical. i128.Min survives because + * neg(Min) == Min and its bit pattern reinterpreted unsigned is exactly 2^127. + */ + toString(radix: i32 = 10): string { + if (!this.isNeg()) return changetype(this).toString(radix); + return '-' + changetype(this.neg()).toString(radix); + } + + /** + * Convert to a normal array of bytes (16 bytes for 128 bits). + * @param bigEndian If true, the highest bytes come first. + */ + @inline + toBytes(bigEndian: bool = false): u8[] { + let result = new Array(16); + this.toArrayBuffer(result.dataStart, bigEndian); + return result; + } + + /** + * Convert to a StaticArray of length 16. + * @param bigEndian If true, the highest bytes come first. + * @returns StaticArray + */ + @inline + toStaticBytes(bigEndian: bool = false): StaticArray { + let result = new StaticArray(16); + this.toArrayBuffer(changetype(result), bigEndian); + return result; + } + + /** + * Convert to Uint8Array + * @param bigEndian Little or Big Endian? Default: false + * @returns Uint8Array + */ + @inline + toUint8Array(bigEndian: bool = false): Uint8Array { + let result = new Uint8Array(16); + this.toArrayBuffer(result.dataStart, bigEndian); + return result; + } + + @inline + private toArrayBufferLE(buffer: usize): void { + store(buffer, this.lo, 0 * sizeof()); + store(buffer, this.hi, 1 * sizeof()); + } + + @inline + private toArrayBufferBE(buffer: usize): void { + store(buffer, bswap(this.hi), 0 * sizeof()); + store(buffer, bswap(this.lo), 1 * sizeof()); + } + + @inline + private toArrayBuffer(buffer: usize, bigEndian: bool = false): void { + if (bigEndian) { + this.toArrayBufferBE(buffer); + } else { + this.toArrayBufferLE(buffer); + } + } +} diff --git a/std/assembly/bignum/integer/i256.ts b/std/assembly/bignum/integer/i256.ts new file mode 100644 index 0000000000..29f1c04a55 --- /dev/null +++ b/std/assembly/bignum/integer/i256.ts @@ -0,0 +1,82 @@ +import { u256 } from './u256'; + +export class i256 { + + constructor( + public lo1: i64 = 0, + public lo2: i64 = 0, + public hi1: i64 = 0, + public hi2: i64 = 0, + ) { + } + + @inline static get Zero(): i256 { + return new i256(); + } + + @inline static get One(): i256 { + return new i256(1); + } + + @inline static get Min(): i256 { + return new i256(0, 0, 0, 0x8000000000000000); + } + + @inline static get Max(): i256 { + return new i256(u64.MAX_VALUE, u64.MAX_VALUE, u64.MAX_VALUE, 0x7FFFFFFFFFFFFFFF); + } + + /** + * Construct from a decimal (or `radix`) string. A leading `-` parses the magnitude + * and negates (two's complement), mirroring `i128.fromString`. + */ + static fromString(str: string, radix: i32 = 10): i256 { + if (str.length > 0 && str.charCodeAt(0) == 0x2D /* '-' */) { + return changetype(u256.fromString(str.substring(1), radix)).neg(); + } + return changetype(u256.fromString(str, radix)); + } + + @inline @operator.prefix('!') + static isEmpty(value: i256): bool { + return value.isZero(); + } + + @inline + isNeg(): bool { + return (this.hi2 >>> 63); + } + + @inline + isZero(): bool { + return !(this.lo1 | this.lo2 | this.hi1 | this.hi2); + } + + @inline @operator.prefix('-') + neg(): i256 { + // two's complement: ~x + 1, carrying across the four limbs + let l1 = ~(this.lo1); + let l2 = ~(this.lo2); + let h1 = ~(this.hi1); + let h2 = ~(this.hi2); + l1 += 1; + if (!l1) { + l2 += 1; + if (!l2) { + h1 += 1; + if (!h1) h2 += 1; + } + } + return new i256(l1, l2, h1, h2); + } + + /** + * Decimal (or `radix`) string. Sign + unsigned magnitude: negate (two's complement) + * and reinterpret as u256, which is layout-identical. i256.Min survives because + * neg(Min) == Min and its bit pattern reinterpreted unsigned is exactly 2^255. + */ + toString(radix: i32 = 10): string { + if (!this.isNeg()) return changetype(this).toString(radix); + return '-' + changetype(this.neg()).toString(radix); + } +} diff --git a/std/assembly/bignum/integer/index.ts b/std/assembly/bignum/integer/index.ts new file mode 100644 index 0000000000..f88a54ae95 --- /dev/null +++ b/std/assembly/bignum/integer/index.ts @@ -0,0 +1,3 @@ +export * from "./i128"; +export * from "./u128"; +export * from "./u256"; diff --git a/std/assembly/bignum/integer/u128.ts b/std/assembly/bignum/integer/u128.ts new file mode 100644 index 0000000000..849aede636 --- /dev/null +++ b/std/assembly/bignum/integer/u128.ts @@ -0,0 +1,963 @@ +import { i128 } from './i128'; +import { i256 } from './i256'; +import { u256 } from './u256'; + +// TODO import this on top level 'index.ts' +import { + __clz128, + __ctz128, + __divmod_quot_hi, + __divmod_rem_hi, + __divmod_rem_lo, + __floatuntidf, + __multi3, + __res128_hi, + __udivmod128, + __udivmod128_10, +} from '../globals'; + +import { atou128, u128toDecimalString } from '../utils'; + +@lazy const HEX_CHARS = '0123456789abcdef'; + +export class u128 { + // CACHE: Static instances to avoid allocation + private static readonly _ZERO: u128 = new u128(0, 0); + private static readonly _ONE: u128 = new u128(1, 0); + private static readonly _MAX: u128 = new u128(-1, -1); + + /** + * Create 128-bit unsigned integer from 64-bit parts + * @param lo low 64-bit part of 128-bit unsigned integer + * @param hi high 64-bit part of 128-bit unsigned integer + */ + constructor( + public lo: u64 = 0, + public hi: u64 = 0, + ) { + } + + @inline static get immutableZero(): u128 { + return u128._ZERO; + } + + @inline static get immutableOne(): u128 { + return u128._ONE; + } + + @inline static get immutableMin(): u128 { + return u128._ZERO; + } + + @inline static get immutableMax(): u128 { + return u128._MAX; + } + + @inline static get Zero(): u128 { return new u128(0, 0); } + @inline static get One(): u128 { return new u128(1, 0); } + @inline static get Min(): u128 { return new u128(0, 0); } + @inline static get Max(): u128 { return new u128(-1, -1); } + + /** + * Ensures the current instance is not a static constant. + * If it is, throws an error. + * Cost: 3 integer comparisons. Cheap insurance. + */ + @inline + private checkMutable(): void { + const ptr = changetype(this); + if (ptr == changetype(u128._ZERO) || + ptr == changetype(u128._ONE) || + ptr == changetype(u128._MAX)) { + throw new Error("u128: Immutable constant"); + } + } + + @inline + static fromString(value: string, radix: i32 = 10): u128 { + return atou128(value, radix); + } + + @inline + static fromI256(value: i256): u128 { + return new u128(value.lo1, value.lo2); + } + + @inline + static fromU256(value: u256): u128 { + return new u128(value.lo1, value.lo2); + } + + @inline + static fromI128(value: i128): u128 { + return new u128(value.lo, value.hi); + } + + @inline + static fromU128(value: u128): u128 { + return new u128(value.lo, value.hi); + } + + @inline + static fromI64(value: i64): u128 { + if (value == 0) return u128.Zero; + if (value == 1) return u128.One; + return new u128(value, value >> 63); + } + + @inline + static fromU64(value: u64): u128 { + if (value == 0) return u128.Zero; + if (value == 1) return u128.One; + return new u128(value); + } + + // max safe uint for f64 actually 53-bits + @inline + static fromF64(value: f64): u128 { + return new u128(value, reinterpret(value) >> 63); + } + + // max safe int for f32 actually 23-bits + @inline + static fromF32(value: f32): u128 { + return new u128(value, (reinterpret(value) >> 31)); + } + + @inline + static fromI32(value: i32): u128 { + if (value == 0) return u128.Zero; + if (value == 1) return u128.One; + return new u128(value, value >> 31); + } + + @inline + static fromU32(value: u32): u128 { + if (value == 0) return u128.Zero; + if (value == 1) return u128.One; + return new u128(value); + } + + @inline + static fromBool(value: bool): u128 { + return value ? u128.One : u128.Zero; + } + + @inline + static fromBits(lo1: u32, lo2: u32, hi1: u32, hi2: u32): u128 { + return new u128( + lo1 | ((lo2) << 32), + hi1 | ((hi2) << 32), + ); + } + + @inline + static fromBytes(array: T, bigEndian: bool = false): u128 { + // @ts-ignore + if (array instanceof u8[]) { + return bigEndian + // @ts-ignore + ? u128.fromBytesBE(array) + // @ts-ignore + : u128.fromBytesLE(array); + } else if (array instanceof Uint8Array) { + return bigEndian + ? u128.fromUint8ArrayBE(array) + : u128.fromUint8ArrayLE(array); + } else { + throw new TypeError("Unsupported generic type"); + } + } + + @inline + static fromBytesLE(array: u8[]): u128 { + if (array.length !== 16) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u128( + load(buffer, 0), + load(buffer, 8) + ); + } + + @inline + static fromBytesBE(array: u8[]): u128 { + if (array.length !== 16) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u128( + bswap(load(buffer, 8)), + bswap(load(buffer, 0)) + ); + } + + @inline + static fromUint8ArrayLE(array: Uint8Array): u128 { + if (array.length !== 16) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u128( + load(buffer, 0), + load(buffer, 8) + ); + } + + @inline + static fromUint8ArrayBE(array: Uint8Array): u128 { + if (array.length !== 16) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u128( + bswap(load(buffer, 8)), + bswap(load(buffer, 0)) + ); + } + + /** + * Create 128-bit unsigned integer from generic type T + * @param value + * @returns 128-bit unsigned integer + */ + @inline + static from(value: T): u128 { + if (value instanceof bool) return u128.fromU64(value); + else if (value instanceof i8) return u128.fromI64(value); + else if (value instanceof u8) return u128.fromU64(value); + else if (value instanceof i16) return u128.fromI64(value); + else if (value instanceof u16) return u128.fromU64(value); + else if (value instanceof i32) return u128.fromI64(value); + else if (value instanceof u32) return u128.fromU64(value); + else if (value instanceof i64) return u128.fromI64(value); + else if (value instanceof u64) return u128.fromU64(value); + else if (value instanceof f32) return u128.fromF64(value); + else if (value instanceof f64) return u128.fromF64(value); + else if (value instanceof i128) return u128.fromI128(value); + else if (value instanceof u128) return u128.fromU128(value); + else if (value instanceof i256) return u128.fromI256(value); + else if (value instanceof u256) return u128.fromU256(value); + else if (value instanceof u8[]) return u128.fromBytes(value); + else if (value instanceof Uint8Array) return u128.fromBytes(value); + else if (value instanceof String) return u128.fromString(value); + else throw new TypeError("Unsupported generic type"); + } + + @inline @operator.prefix('!') + static isEmpty(value: u128): bool { + return !(value.lo | value.hi); + } + + @inline @operator('|') + static or(a: u128, b: u128): u128 { + return new u128(a.lo | b.lo, a.hi | b.hi); + } + + @inline @operator('^') + static xor(a: u128, b: u128): u128 { + return new u128(a.lo ^ b.lo, a.hi ^ b.hi); + } + + @inline @operator('&') + static and(a: u128, b: u128): u128 { + return new u128(a.lo & b.lo, a.hi & b.hi); + } + + @inline @operator('<<') + static shl(value: u128, shift: i32): u128 { + // Cache check: if shift is 0 or invalid, return existing constants if possible + if (shift <= 0) { + return shift == 0 ? value.clone() : u128.Zero; // Use cached Zero + } + + if (shift >= 128) { + return u128.Zero; // Use cached Zero + } + + // Unrolled shift logic + if (shift < 64) { + const lo = value.lo << shift; + const hi = (value.hi << shift) | (value.lo >>> (64 - shift)); + return new u128(lo, hi); + } else { + // shift >= 64 + return new u128(0, value.lo << (shift - 64)); + } + } + + @inline @operator('>>') + static shr(value: u128, shift: i32): u128 { + shift &= 127; + if (shift == 0) return value.clone(); + + // Unrolled shift logic + if (shift < 64) { + let hi = value.hi >> shift; + let lo = (value.hi << (64 - shift)) | (value.lo >> shift); + return new u128(lo, hi); + } else { + let s = shift - 64; + return new u128(value.hi >> s, 0); + } + } + + @inline @operator('>>>') + static shr_u(value: u128, shift: i32): u128 { + return u128.shr(value, shift); + } + + @inline + static rotl(value: u128, shift: i32): u128 { + let n = shift & 127; + if (n == 0) return value.clone(); + + let lo = value.lo; + let hi = value.hi; + if (n == 64) { + return new u128(hi, lo); + } + if (n & 64) { + let t = lo; + lo = hi; + hi = t; + } + let slo = lo << n; + let shi = hi << n; + let rlo = lo >> (64 - n); + let rhi = hi >> (64 - n); + return new u128(slo | rhi, shi | rlo); + } + + @inline + static rotr(value: u128, shift: i32): u128 { + let n = shift & 127; + if (n == 0) return value.clone(); + + let lo = value.lo; + let hi = value.hi; + if (n == 64) { + return new u128(hi, lo); + } + if (n & 64) { + let t = lo; + lo = hi; + hi = t; + } + let slo = lo >> n; + let shi = hi >> n; + let rlo = lo << (64 - n); + let rhi = hi << (64 - n); + return new u128(slo | rhi, shi | rlo); + } + + @inline @operator('+') + static add(a: u128, b: u128): u128 { + var alo = a.lo; + var lo = alo + b.lo; + var hi = a.hi + b.hi + u64(lo < alo); + return new u128(lo, hi); + } + + @inline @operator('-') + static sub(a: u128, b: u128): u128 { + var alo = a.lo; + var lo = alo - b.lo; + var hi = a.hi - b.hi - u64(lo > alo); + return new u128(lo, hi); + } + + // mul: u128 x u128 = u128 + @inline @operator('*') + static mul(a: u128, b: u128): u128 { + return new u128( + __multi3(a.lo, a.hi, b.lo, b.hi), + __res128_hi + ); + } + + @inline @operator('/') + static div(a: u128, b: u128): u128 { + return new u128( + __udivmod128(a.lo, a.hi, b.lo, b.hi), + __divmod_quot_hi + ); + } + + @inline @operator('%') + static rem(a: u128, b: u128): u128 { + __udivmod128(a.lo, a.hi, b.lo, b.hi); + return new u128(__divmod_rem_lo, __divmod_rem_hi); + } + + @inline + static div10(value: u128): u128 { + return new u128( + __udivmod128_10(value.lo, value.hi), + __divmod_quot_hi + ); + } + + @inline + static rem10(value: u128): u128 { + __udivmod128_10(value.lo, value.hi); + return new u128(__divmod_rem_lo, __divmod_rem_hi); + } + + /** + * Calculate power of base with exponent + * @param base 128-bit unsigned integer + * @param exponent 32-bit signed integer + * @returns 128-bit unsigned integer + */ + @operator('**') + static pow(base: u128, exponent: i32): u128 { + // any negative exponent produce zero + + var result = u128.One; + + if (base == result) return result; + var tmp = base.clone(); + if (exponent <= 1) { + if (exponent < 0) return u128.Zero; + return exponent == 0 ? result : tmp; + } + + if (ASC_SHRINK_LEVEL < 1) { + var lo = base.lo; + var hi = base.hi; + // if base > u64::max and exp > 1 always return "0" + if (!lo) return u128.Zero; + if (!hi) { + let lo1 = lo - 1; + // "1 ^ exponent" always return "1" + if (!lo1) return result; + + // if base is power of two do "1 << log2(base) * exp" + if (!(lo & lo1)) { + let shift = (64 - clz(lo1)) * exponent; + // @ts-ignore + return shift < 128 ? result << shift : u128.Zero; + } + } + + if (exponent <= 4) { + let baseSq = tmp.sqr(); + switch (exponent) { + case 2: + return baseSq; // base ^ 2 + // @ts-ignore + case 3: + return baseSq * base; // base ^ 2 * base + case 4: + return baseSq.sqr(); // base ^ 2 * base ^ 2 + default: + break; + } + } + + let log = 32 - clz(exponent); + if (log <= 7) { + // 128 = 2 ^ 7, so need usually only seven cases + switch (log) { + case 7: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 6: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 5: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 4: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 3: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 2: + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + case 1: + // @ts-ignore + if (exponent & 1) result *= tmp; + } + return result; + } + } + + while (exponent > 0) { + // @ts-ignore + if (exponent & 1) result *= tmp; + exponent >>= 1; + tmp.sqr(); + } + return result; + } + + // compute floor(sqrt(x)) + static sqrt(value: u128): u128 { + var rem = value.clone(); + if (value < new u128(2)) { + return rem; + } + var res = u128.Zero; + // @ts-ignore + var pos = u128.One << (127 - (u128.clz(value) | 1)); + // @ts-ignore + while (!pos.isZero()) { + // @ts-ignore + value = res + pos; + if (rem >= value) { + // @ts-ignore + rem = rem - value; + // @ts-ignore + res = pos + value; + } + // @ts-ignore + res >>= 1; + pos >>= 2; + } + return res; + } + + @inline @operator('==') + static eq(a: u128, b: u128): bool { + return a.hi == b.hi && a.lo == b.lo; + } + + @inline @operator('!=') + static ne(a: u128, b: u128): bool { + return !u128.eq(a, b); + } + + @inline @operator('<') + static lt(a: u128, b: u128): bool { + var ah = a.hi, bh = b.hi; + return ah == bh ? a.lo < b.lo : ah < bh; + } + + @inline @operator('>') + static gt(a: u128, b: u128): bool { + var ah = a.hi, bh = b.hi; + return ah == bh ? a.lo > b.lo : ah > bh; + } + + @inline @operator('<=') + static le(a: u128, b: u128): bool { + return !u128.gt(a, b); + } + + @inline @operator('>=') + static ge(a: u128, b: u128): bool { + return !u128.lt(a, b); + } + + /** + * Get ordering + * if a > b then result is 1 + * if a < b then result is -1 + * if a = b then result is 0 + * @param a 128-bit unsigned integer + * @param b 128-bit unsigned integer + * @returns 32-bit signed integer + */ + @inline + static ord(a: u128, b: u128): i32 { + // if a > b => +1 + // if a < b => -1 + // if equal => 0 + if (a.hi > b.hi) return 1; + if (a.hi < b.hi) return -1; + if (a.lo > b.lo) return 1; + if (a.lo < b.lo) return -1; + return 0; + } + + /** + * Compute count of set (populated) bits + * @param value 128-bit unsigned integer + * @returns 32-bit signed integer + */ + @inline + static popcnt(value: u128): i32 { + return (popcnt(value.lo) + popcnt(value.hi)); + } + + /** + * Compute bit count of leading zeros + * @param value 128-bit unsigned integer + * @returns 32-bit signed integer + */ + @inline + static clz(value: u128): i32 { + return __clz128(value.lo, value.hi); + } + + /** + * Compute bit count of trailing zeros + * @param value 128-bit unsigned integer + * @returns 32-bit signed integer + */ + @inline + static ctz(value: u128): i32 { + return __ctz128(value.lo, value.hi); + } + + /** + * Calculate squared value (value ** 2) + * @param value 128-bit unsigned integer + * @returns 128-bit unsigned integer + */ + @inline + static sqr(value: u128): u128 { + return value.clone().sqr(); + } + + /** + * Calculate multiply and division as `number * numerator / denominator` + * without overflow in multiplication part. + * + * @returns 128-bit unsigned integer + */ + static muldiv(a: u128, b: u128, c: u128): u128 { + let A = u256.fromU128(a); + let B = u256.fromU128(b); + let C = u256.fromU128(c); + + let product = u256.mul(A, B); + let quotient = u256.div(product, C); + + return quotient.toU128(); + } + + @inline + set(value: u128): this { + this.checkMutable(); + this.lo = value.lo; + this.hi = value.hi; + return this; + } + + @inline + setI64(value: i64): this { + this.checkMutable(); + this.lo = value; + this.hi = value >> 63; + return this; + } + + @inline + setU64(value: u64): this { + this.checkMutable(); + this.lo = value; + this.hi = 0; + return this; + } + + @inline + setI32(value: i32): this { + this.checkMutable(); + this.lo = value; + this.hi = value >> 63; + return this; + } + + @inline + setU32(value: u32): this { + this.checkMutable(); + this.lo = value; + this.hi = 0; + return this; + } + + @inline + isZero(): bool { + return !(this.lo | this.hi); + } + + @inline @operator.prefix('~') + not(): u128 { + return new u128(~this.lo, ~this.hi); + } + + @inline @operator.prefix('+') + pos(): u128 { + return this; + } + + @inline @operator.prefix('-') + neg(): u128 { + var lo = ~this.lo; + var hi = ~this.hi; + var lo1 = lo + 1; + return new u128(lo1, hi + u64(lo1 < lo)); + } + + @operator.prefix('++') + preInc(): this { + this.checkMutable(); + var lo = this.lo; + var lo1 = lo + 1; + this.hi += u64(lo1 < lo); + this.lo = lo1; + return this; + } + + @operator.prefix('--') + preDec(): this { + this.checkMutable(); + var lo = this.lo; + var lo1 = lo - 1; + this.hi -= u64(lo1 > lo); + this.lo = lo1; + return this; + } + + @operator.postfix('++') + postInc(): u128 { + return this.clone().preInc(); + } + + @operator.postfix('--') + postDec(): u128 { + return this.clone().preDec(); + } + + /** + * Calculate inplace squared 128-bit unsigned integer (this ** 2) + * @returns 128-bit unsigned integer + */ + sqr(): this { + this.checkMutable(); + // Use built-in 128×128 => 128 multiplication + // i.e. "x * x" + let tmp = u128.mul(this, this); + this.lo = tmp.lo; + this.hi = tmp.hi; + return this; + } + + /** + * Convert to 256-bit signed integer + * @returns 256-bit signed integer + */ + @inline + toI256(): i256 { + return new i256(this.lo, this.hi); + } + + /** + * Convert to 256-bit unsigned integer + * @returns 256-bit unsigned integer + */ + @inline + toU256(): u256 { + return new u256(this.lo, this.hi); + } + + /** + * Convert to 128-bit signed integer + * @returns 128-bit signed integer + */ + @inline + toI128(): i128 { + return new i128(this.lo, this.hi); + } + + /** + * Convert to 128-bit unsigned integer + * @returns 128-bit unsigned integer + */ + @inline + toU128(): this { + return this; + } + + /** + * Convert to 64-bit signed integer + * @returns 64-bit signed integer + */ + @inline + toI64(): i64 { + return ( + (this.lo & 0x7FFFFFFFFFFFFFFF) | + (this.hi & 0x8000000000000000) + ); + } + + /** + * Convert to 64-bit unsigned integer + * @returns 64-bit unsigned integer + */ + @inline + toU64(): u64 { + return this.lo; + } + + /** + * Convert to 32-bit signed integer + * @returns 32-bit signed integer + */ + @inline + toI32(): i32 { + return this.toI64(); + } + + /** + * Convert to 32-bit unsigned integer + * @returns 32-bit unsigned integer + */ + @inline + toU32(): u32 { + return this.lo; + } + + /** + * Convert to 1-bit boolean + * @returns 1-bit boolean + */ + @inline + toBool(): bool { + return (this.lo | this.hi) != 0; + } + + /** + * Convert to 64-bit float number in deteministic way + * @returns 64-bit float + */ + @inline + toF64(): f64 { + return __floatuntidf(this.lo, this.hi); + } + + /** + * Convert to 32-bit float number + * @returns 32-bit float + */ + @inline + toF32(): f32 { + return this.toF64(); + } + + /** + * Convert to generic type `T`. Useful inside other generics methods + * @param T is ` | string> + * @returns type of `T` + */ + @inline + as(): T { + if (isBoolean()) { + return this.toBool(); + } else if (isInteger()) { + if (isSigned()) { + // i8, i16, i32, i64 + return this.toI64(); + } else { + // u8, u16, u32, u64 + return this.toU64(); + } + } else if (isFloat()) { + // f32, f64 + return this.toF64(); + } else if (isString()) { + return this.toString(); + } else if (isReference()) { + let dummy = changetype(0); + if (dummy instanceof u8[]) return this.toBytes(); + else if (dummy instanceof StaticArray) return this.toStaticBytes(); + else if (dummy instanceof Uint8Array) return this.toUint8Array(); + else if (dummy instanceof i128) return this.toI128(); + else if (dummy instanceof u128) return this; + else if (dummy instanceof u256) return this.toU256(); + else throw new TypeError('Unsupported generic type'); + } else throw new TypeError('Unsupported generic type'); + } + + /** + * Convert to byte array + * @param bigEndian Little or Big Endian? Default: false + * @returns Array of bytes + */ + @inline + toBytes(bigEndian: bool = false): u8[] { + var result = new Array(16); + this.toArrayBuffer(result.dataStart, bigEndian); + return result; + } + + /** + * Convert to byte static array + * @param bigEndian Little or Big Endian? Default: false + * @returns StaticArray of bytes + */ + @inline + toStaticBytes(bigEndian: bool = false): StaticArray { + var result = new StaticArray(16); + this.toArrayBuffer(changetype(result), bigEndian); + return result; + } + + /** + * Convert to Uint8Array + * @param bigEndian Little or Big Endian? Default: false + * @returns Uint8Array + */ + @inline + toUint8Array(bigEndian: bool = false): Uint8Array { + var result = new Uint8Array(16); + this.toArrayBuffer(result.dataStart, bigEndian); + return result; + } + + /** + * Return copy of current 128-bit value + * @returns 128-bit unsigned integer + */ + clone(): u128 { + return new u128(this.lo, this.hi); + } + + toString(radix: i32 = 10): string { + assert(radix == 10 || radix == 16, 'radix argument must be between 10 or 16'); + if (this.isZero()) return '0'; + + var result = ''; + if (radix == 16) { + let shift: i32 = 124 - (u128.clz(this) & ~3); + while (shift >= 0) { + // @ts-ignore + result += HEX_CHARS.charAt(((this >> shift).lo & 15)); + shift -= 4; + } + return result; + } + return u128toDecimalString(this); + } + + @inline + private toArrayBufferLE(buffer: usize): void { + store(buffer, this.lo, 0 * sizeof()); + store(buffer, this.hi, 1 * sizeof()); + } + + @inline + private toArrayBufferBE(buffer: usize): void { + store(buffer, bswap(this.hi), 0 * sizeof()); + store(buffer, bswap(this.lo), 1 * sizeof()); + } + + @inline + private toArrayBuffer(buffer: usize, bigEndian: bool = false): void { + if (bigEndian) { + this.toArrayBufferBE(buffer); + } else { + this.toArrayBufferLE(buffer); + } + } +} diff --git a/std/assembly/bignum/integer/u256.ts b/std/assembly/bignum/integer/u256.ts new file mode 100644 index 0000000000..b7c8c64209 --- /dev/null +++ b/std/assembly/bignum/integer/u256.ts @@ -0,0 +1,1007 @@ +import { i128 } from './i128'; +import { u128 } from './u128'; +import { u256toDecimalString } from "../utils"; +import { + __mul256, __u256carry, __u256carrySub, add64Local, sub64 +} from '../globals'; + +@lazy const HEX_CHARS = '0123456789abcdef'; + +/** + * Represents a 256-bit unsigned integer. + * Optimized for gas efficiency with unrolled loops and direct memory access. + */ +export class u256 { + /** + * Constructs a new `u256` with the specified 64-bit limbs. + * @constructor + * @param {u64} [lo1=0] - The lowest 64 bits. + * @param {u64} [lo2=0] - The 64 bits above `lo1`. + * @param {u64} [hi1=0] - The 64 bits above `lo2`. + * @param {u64} [hi2=0] - The highest 64 bits. + */ + constructor( + public lo1: u64 = 0, + public lo2: u64 = 0, + public hi1: u64 = 0, + public hi2: u64 = 0, + ) {} + + @inline static get Zero(): u256 { return new u256(0, 0, 0, 0); } + @inline static get One(): u256 { return new u256(1, 0, 0, 0); } + @inline static get Min(): u256 { return new u256(0, 0, 0, 0); } + @inline static get Max(): u256 { return new u256(-1, -1, -1, -1); } + + /** + * A constant representing the maximum value for 256-bit unsigned integer. + * All bits set to 1. + * @returns {u256} + */ + /** + * Creates a new `u256` from an existing `u256`. + * @param {u256} value - The source `u256` value. + * @returns {u256} - A new copy of the `value`. + */ + @inline + static fromU256(value: u256): u256 { + return new u256(value.lo1, value.lo2, value.hi1, value.hi2); + } + + /** + * Creates a new `u256` from a 128-bit unsigned integer. + * @param {u128} value - The 128-bit unsigned integer. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromU128(value: u128): u256 { + return new u256(value.lo, value.hi); + } + + /** + * Creates a new `u256` from a 64-bit unsigned integer. + * @param {u64} value - The 64-bit unsigned integer. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromU64(value: u64): u256 { + if (value == 0) return u256.Zero; + if (value == 1) return u256.One; + return new u256(value); + } + + /** + * Creates a new `u256` from a 64-bit signed integer (sign-extends). + * @param {i64} value - The 64-bit signed integer. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromI64(value: i64): u256 { + if (value == 0) return u256.Zero; + if (value == 1) return u256.One; + if (value == -1) return u256.Max; + let mask = value >> 63; + return new u256(value, mask, mask, mask); + } + + /** + * Creates a new `u256` from a 32-bit unsigned integer. + * @param {u32} value - The 32-bit unsigned integer. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromU32(value: u32): u256 { + if (value == 0) return u256.Zero; + if (value == 1) return u256.One; + return new u256(value); + } + + /** + * Creates a new `u256` from a 32-bit signed integer (sign-extends). + * @param {i32} value - The 32-bit signed integer. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromI32(value: i32): u256 { + if (value == 0) return u256.Zero; + if (value == 1) return u256.One; + if (value == -1) return u256.Max; + let mask: u64 = value >> 63; + return new u256(value, mask, mask, mask); + } + + /** + * Creates a new `u256` from 8 separate 32-bit segments (lower to higher). + * @param {u32} l0 - Lower 32 bits of the first 64-bit segment. + * @param {u32} l1 - Higher 32 bits of the first 64-bit segment. + * @param {u32} l2 - Lower 32 bits of the second 64-bit segment. + * @param {u32} l3 - Higher 32 bits of the second 64-bit segment. + * @param {u32} h0 - Lower 32 bits of the third 64-bit segment. + * @param {u32} h1 - Higher 32 bits of the third 64-bit segment. + * @param {u32} h2 - Lower 32 bits of the fourth 64-bit segment. + * @param {u32} h3 - Higher 32 bits of the fourth 64-bit segment. + * @returns {u256} - The resulting 256-bit unsigned integer. + */ + @inline + static fromBits( + l0: u32, l1: u32, l2: u32, l3: u32, + h0: u32, h1: u32, h2: u32, h3: u32, + ): u256 { + return new u256( + l0 | ((l1) << 32), + l2 | ((l3) << 32), + h0 | ((h1) << 32), + h2 | ((h3) << 32), + ); + } + + /** + * Creates a new `u256` from an array of bytes or `Uint8Array`. + * @param {T} array - The source array of bytes (u8[] or Uint8Array). + * @param {boolean} [bigEndian=false] - Whether the bytes are in big-endian format. + * @throws {TypeError} If the generic type `T` is not supported. + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromBytes(array: T, bigEndian: bool = false): u256 { + // @ts-ignore + if (array instanceof u8[]) { + return bigEndian + // @ts-ignore + ? u256.fromBytesBE(array) + // @ts-ignore + : u256.fromBytesLE(array); + } else if (array instanceof Uint8Array) { + return bigEndian + ? u256.fromUint8ArrayBE(array) + : u256.fromUint8ArrayLE(array); + } else { + throw new TypeError("Unsupported generic type"); + } + } + + /** + * Creates a new `u256` from a little-endian array of bytes. + * @param {u8[]} array - A 32-byte array (little-endian). + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromBytesLE(array: u8[]): u256 { + if (array.length !== 32) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u256( + load(buffer, 0), + load(buffer, 8), + load(buffer, 16), + load(buffer, 24), + ); + } + + /** + * Creates a new `u256` from a big-endian array of bytes. + * @param {u8[]} array - A 32-byte array (big-endian). + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromBytesBE(array: u8[]): u256 { + if (array.length !== 32) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u256( + bswap(load(buffer, 24)), + bswap(load(buffer, 16)), + bswap(load(buffer, 8)), + bswap(load(buffer, 0)) + ); + } + + /** + * Creates a new `u256` from a little-endian `Uint8Array`. + * @param {Uint8Array} array - A 32-byte `Uint8Array` (little-endian). + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromUint8ArrayLE(array: Uint8Array): u256 { + if (array.length !== 32) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u256( + load(buffer, 0), + load(buffer, 8), + load(buffer, 16), + load(buffer, 24) + ); + } + + /** + * Creates a new `u256` from a big-endian `Uint8Array`. + * @param {Uint8Array} array - A 32-byte `Uint8Array` (big-endian). + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromUint8ArrayBE(array: Uint8Array): u256 { + if (array.length !== 32) throw new Error("Invalid length"); + let buffer = array.dataStart; + return new u256( + bswap(load(buffer, 24)), + bswap(load(buffer, 16)), + bswap(load(buffer, 8)), + bswap(load(buffer, 0)) + ); + } + + /** + * Creates a new `u256` from a 64-bit floating-point number. + * NOTE: This is only correct up to about 2^53. + * @param {f64} value - The 64-bit float value. + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromF64(value: f64): u256 { + let mask = u64(reinterpret(value) >> 63); + return new u256(value, mask, mask, mask); + } + + /** + * Creates a new `u256` from a 32-bit floating-point number. + * NOTE: This is only correct up to about 2^23. + * @param {f32} value - The 32-bit float value. + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromF32(value: f32): u256 { + let mask = u64(reinterpret(value) >> 31); + return new u256(value, mask, mask, mask); + } + + /** + * Creates a new `u256` from a generic value `T`. + * Supported types: bool, i8, u8, i16, u16, i32, u32, i64, u64, f32, f64, u128, u256, u8[], Uint8Array. + * @param {T} value - The source value. + * @throws {TypeError} If the type `T` is not supported. + * @returns {u256} - The resulting `u256`. + */ + @inline + static from(value: T): u256 { + if (value instanceof bool) return u256.fromU64(value); + else if (value instanceof i8) return u256.fromI64(value); + else if (value instanceof u8) return u256.fromU64(value); + else if (value instanceof i16) return u256.fromI64(value); + else if (value instanceof u16) return u256.fromU64(value); + else if (value instanceof i32) return u256.fromI64(value); + else if (value instanceof u32) return u256.fromU64(value); + else if (value instanceof i64) return u256.fromI64(value); + else if (value instanceof u64) return u256.fromU64(value); + else if (value instanceof f32) return u256.fromF64(value); + else if (value instanceof f64) return u256.fromF64(value); + else if (value instanceof u128) return u256.fromU128(value); + else if (value instanceof u256) return u256.fromU256(value); + else if (value instanceof u8[]) return u256.fromBytes(value); + else if (value instanceof Uint8Array) return u256.fromBytes(value); + else throw new TypeError("Unsupported generic type"); + } + + /** + * Parses a string in decimal or hexadecimal format into a `u256`. + * @param {string} str - The input string. + * @param {i32} [radix=10] - The base (10 for decimal, 16 for hexadecimal). + * @returns {u256} - The resulting `u256`. + */ + @inline + static fromString(str: string, radix: i32 = 10): u256 { + assert(radix == 10 || radix == 16, "radix must be 10 or 16"); + let len = str.length; + if (len == 0) return u256.Zero; + let result = u256.Zero; // Use cached Zero + if (radix == 10) { + for (let i = 0; i < len; i++) { + let c = str.charCodeAt(i); + assert(c >= 0x30 && c <= 0x39, "Invalid decimal digit"); + let digit: u64 = c - 0x30; + result = result * u256.from(10) + u256.from(digit); + } + } else { + for (let i = 0; i < len; i++) { + let c = str.charCodeAt(i); + let digit: u64 = 0; + if (c >= 0x30 && c <= 0x39) digit = c - 0x30; + else if (c >= 0x41 && c <= 0x46) digit = c - 0x41 + 10; + else if (c >= 0x61 && c <= 0x66) digit = c - 0x61 + 10; + else assert(false, "Invalid hexadecimal digit"); + result = result * u256.from(16) + u256.from(digit); + } + } + return result; + } + + /** + * Checks if a given `u256` value is zero using the `!` operator. + * @param {u256} value - The `u256` to check. + * @returns {boolean} - True if zero, false otherwise. + */ + @inline @operator.prefix('!') + static isEmpty(value: u256): bool { + return value.isZero(); + } + + /** + * Adds two `u256` values and returns a new `u256` with the sum. + * @param {u256} a - The first `u256` addend. + * @param {u256} b - The second `u256` addend. + * @returns {u256} - The sum of `a` and `b`. + */ + @operator('+') + static add(a: u256, b: u256): u256 { + let lo1 = add64Local(a.lo1, b.lo1, 0); + let c1 = __u256carry; + let lo2 = add64Local(a.lo2, b.lo2, c1); + let c2 = __u256carry; + let hi1 = add64Local(a.hi1, b.hi1, c2); + let c3 = __u256carry; + let hi2 = add64Local(a.hi2, b.hi2, c3); + return new u256(lo1, lo2, hi1, hi2); + } + + /** + * Divides `a` by `b` (integer division). + * @param {u256} a - The dividend. + * @param {u256} b - The divisor. + * @throws {Error} If `b` is zero. + * @returns {u256} - The quotient of the division. + * Optimized Division. + * Performs division in-place on clones to minimize object allocation. + */ + @operator('/') + public static div(a: u256, b: u256): u256 { + if (b.isZero()) throw new Error('Division by zero'); + if (a.isZero() || u256.lt(a, b)) return u256.Zero; // Return cached Zero + if (u256.eq(a, b)) return u256.One; // Return cached One + + // Clone to mutate in-place + let n = a.clone(); + let d = b.clone(); + let result = u256.Zero.clone(); // Start with fresh Zero + + const shift = u256.clz(d) - u256.clz(n); + + // Shift d left by 'shift' + // Since d is a clone, we can mutate/reassign it + d = u256.shl(d, shift); + + // Unrolled restore division + for (let i = shift; i >= 0; i--) { + if (u256.ge(n, d)) { + n.subAssign(d); // In-place subtract + result.orAssignBit(i); // In-place bit set + } + d.rshiftOne(); // In-place right shift by 1 + } + return result; + } + + /** + * Left-shifts a `u256` by the specified number of bits. + * @param {u256} value - The `u256` to shift. + * @param {i32} shift - The number of bits to shift (modulo 256). + * @returns {u256} - The shifted `u256`. + * Optimized Left Shift (Massacred allocation overhead). + * Unrolls the logic into local variables to avoid Array allocation. + */ + @operator('<<') + public static shl(value: u256, shift: i32): u256 { + if (shift <= 0) return shift == 0 ? value.clone() : u256.Zero; // Return cached + if (shift >= 256) return u256.Zero; // Return cached + + shift &= 255; + + const bits = 64; + const segShift = (shift / bits) | 0; + const bitShift = shift % bits; + const invShift = bits - bitShift; + + let r0: u64 = 0, r1: u64 = 0, r2: u64 = 0, r3: u64 = 0; + const i0 = value.lo1, i1 = value.lo2, i2 = value.hi1, i3 = value.hi2; + + if (segShift == 0) { + r0 = i0 << bitShift; + r1 = (i1 << bitShift) | (bitShift == 0 ? 0 : i0 >>> invShift); + r2 = (i2 << bitShift) | (bitShift == 0 ? 0 : i1 >>> invShift); + r3 = (i3 << bitShift) | (bitShift == 0 ? 0 : i2 >>> invShift); + } else if (segShift == 1) { + r1 = i0 << bitShift; + r2 = (i1 << bitShift) | (bitShift == 0 ? 0 : i0 >>> invShift); + r3 = (i2 << bitShift) | (bitShift == 0 ? 0 : i1 >>> invShift); + } else if (segShift == 2) { + r2 = i0 << bitShift; + r3 = (i1 << bitShift) | (bitShift == 0 ? 0 : i0 >>> invShift); + } else if (segShift == 3) { + r3 = i0 << bitShift; + } + + return new u256(r0, r1, r2, r3); + } + + /** + * Subtracts `b` from `a` and returns a new `u256`. + * @param {u256} a - The minuend. + * @param {u256} b - The subtrahend. + * @returns {u256} - The difference `a - b`. + */ + @operator('-') + static sub(a: u256, b: u256): u256 { + let lo1 = sub64(a.lo1, b.lo1, 0); + let b1 = __u256carrySub; + let lo2 = sub64(a.lo2, b.lo2, b1); + let b2 = __u256carrySub; + let hi1 = sub64(a.hi1, b.hi1, b2); + let b3 = __u256carrySub; + let hi2 = sub64(a.hi2, b.hi2, b3); + return new u256(lo1, lo2, hi1, hi2); + } + + /** + * Bitwise OR between two `u256` values. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {u256} - The bitwise OR result. + */ + @inline @operator('|') + static or(a: u256, b: u256): u256 { + return new u256(a.lo1 | b.lo1, a.lo2 | b.lo2, a.hi1 | b.hi1, a.hi2 | b.hi2); + } + + /** + * Bitwise XOR between two `u256` values. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {u256} - The bitwise XOR result. + */ + @inline @operator('^') + static xor(a: u256, b: u256): u256 { + return new u256(a.lo1 ^ b.lo1, a.lo2 ^ b.lo2, a.hi1 ^ b.hi1, a.hi2 ^ b.hi2); + } + + /** + * Bitwise AND between two `u256` values. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {u256} - The bitwise AND result. + */ + @inline @operator('&') + static and(a: u256, b: u256): u256 { + return new u256(a.lo1 & b.lo1, a.lo2 & b.lo2, a.hi1 & b.hi1, a.hi2 & b.hi2); + } + + /** + * Right-shifts a `u256` by the specified number of bits (logical shift). + * @param {u256} value - The `u256` to shift. + * @param {i32} shift - The number of bits to shift (modulo 256). + * @returns {u256} - The shifted `u256`. + */ + @operator('>>') + static shr(value: u256, shift: i32): u256 { + // If shift <= 0 => shift=0 means "no shift," shift<0 is arguably invalid. + // We just return a if shift=0, else zero if negative. Adjust to your preference. + if (shift <= 0) { + return shift == 0 ? value.clone() : u256.Zero; + } + + // If shift >= 256 => the result is zero for a 256-bit integer + if (shift >= 256) { + return u256.Zero; + } + + // Now shift is in [1..255] + // Some code likes to do shift &= 255; but after the above check, it’s no longer necessary. + // We'll keep it for consistency: + shift &= 255; + + // If after masking shift is 0, that means the original shift was multiple of 256, but we handled it above + if (shift == 0) return value.clone(); + + const w = shift >>> 6; // how many full 64-bit words to drop + const b = shift & 63; // how many bits to shift within a word + + let lo1 = value.lo1; + let lo2 = value.lo2; + let hi1 = value.hi1; + let hi2 = value.hi2; + + // Shift words down by w words + if (w >= 4) return u256.Zero; // Return cached + else if (w == 3) { lo1 = hi2; lo2 = 0; hi1 = 0; hi2 = 0; } + else if (w == 2) { lo1 = hi1; lo2 = hi2; hi1 = 0; hi2 = 0; } + else if (w == 1) { lo1 = lo2; lo2 = hi1; hi1 = hi2; hi2 = 0; } + + // Now apply the bit shift b + if (b > 0) { + const invB = 64 - b; + lo1 = (lo1 >>> b) | (lo2 << invB); + lo2 = (lo2 >>> b) | (hi1 << invB); + hi1 = (hi1 >>> b) | (hi2 << invB); + hi2 = hi2 >>> b; + } + + return new u256(lo1, lo2, hi1, hi2); + } + + /** + * Unsigned right shift operator (same as `shr` for `u256`). + * @param {u256} value - The `u256` to shift. + * @param {i32} shift - The number of bits to shift (modulo 256). + * @returns {u256} - The shifted `u256`. + */ + @inline @operator('>>>') + static shr_u(value: u256, shift: i32): u256 { + return u256.shr(value, shift); + } + + /** + * Checks if two `u256` values are equal. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {boolean} - True if the two values are equal, otherwise false. + */ + @inline @operator('==') + static eq(a: u256, b: u256): bool { + return a.lo1 == b.lo1 && a.lo2 == b.lo2 && a.hi1 == b.hi1 && a.hi2 == b.hi2; + } + + /** + * Checks if two `u256` values are not equal. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {boolean} - True if the two values differ, otherwise false. + */ + @inline @operator('!=') + static ne(a: u256, b: u256): bool { + return !u256.eq(a, b); + } + + /** + * Checks if `a < b`. + * @param {u256} a - The first operand. + * @param {u256} b - The second operand. + * @returns {boolean} - True if `a` is less than `b`, otherwise false. + */ + @operator('<') + static lt(a: u256, b: u256): bool { + if (a.hi2 != b.hi2) return a.hi2 < b.hi2; + if (a.hi1 != b.hi1) return a.hi1 < b.hi1; + if (a.lo2 != b.lo2) return a.lo2 < b.lo2; + return a.lo1 < b.lo1; + } + + @inline @operator('>') + static gt(a: u256, b: u256): bool { return b < a; } + @inline @operator('<=') + static le(a: u256, b: u256): bool { return !u256.gt(a, b); } + @inline @operator('>=') + static ge(a: u256, b: u256): bool { return !u256.lt(a, b); } + + @inline @operator('*') + static mul(a: u256, b: u256): u256 { + return __mul256(a.lo1, a.lo2, a.hi1, a.hi2, b.lo1, b.lo2, b.hi1, b.hi2); + } + + /** + * Counts the number of set bits (1s) in the `u256`. + * @param {u256} value - The `u256` to count bits for. + * @returns {i32} - The number of bits set to 1. + */ + @inline + static popcnt(value: u256): i32 { + return (popcnt(value.lo1) + popcnt(value.lo2) + popcnt(value.hi1) + popcnt(value.hi2)); + } + + /** + * Counts leading zeros in the `u256`. + * @param {u256} value - The `u256` to evaluate. + * @returns {i32} - The number of leading zero bits. + */ + @inline + static clz(value: u256): i32 { + if (value.hi2) return clz(value.hi2); + if (value.hi1) return (clz(value.hi1) + 64); + if (value.lo2) return (clz(value.lo2) + 128); + if (value.lo1) return (clz(value.lo1) + 192); + return 256; + } + + /** + * Counts trailing zeros in the `u256`. + * @param {u256} value - The `u256` to evaluate. + * @returns {i32} - The number of trailing zero bits. + */ + @inline + static ctz(value: u256): i32 { + if (value.lo1) return ctz(value.lo1); + if (value.lo2) return (ctz(value.lo2) + 64); + if (value.hi1) return (ctz(value.hi1) + 128); + if (value.hi2) return (ctz(value.hi2) + 192); + return 256; + } + + /** + * Sets the value of this `u256` to another `u256`. + * @param {u256} value - The source `u256`. + * @returns {this} - The current instance. + */ + @inline + set(value: u256): this { + this.lo1 = value.lo1; this.lo2 = value.lo2; this.hi1 = value.hi1; this.hi2 = value.hi2; + return this; + } + + /** + * Sets the lower 128 bits of this `u256` from a `u128`, resetting the higher 128 bits to zero. + * @param {u128} value - The source 128-bit unsigned integer. + * @returns {this} - The current instance. + */ + @inline + setU128(value: u128): this { + this.lo1 = value.lo; this.lo2 = value.hi; this.hi1 = 0; this.hi2 = 0; + return this; + } + + /** + * Sets this `u256` to the sign-extended value of a 64-bit signed integer. + * @param {i64} value - The 64-bit signed integer. + * @returns {this} - The current instance. + */ + @inline + setI64(value: i64): this { + let mask: u64 = value >> 63; + this.lo1 = value; this.lo2 = mask; this.hi1 = mask; this.hi2 = mask; + return this; + } + + /** + * Sets this `u256` to the specified 64-bit unsigned integer, clearing higher bits. + * @param {u64} value - The 64-bit unsigned integer. + * @returns {this} - The current instance. + */ + @inline + setU64(value: u64): this { + this.lo1 = value; this.lo2 = 0; this.hi1 = 0; this.hi2 = 0; + return this; + } + + /** + * Sets this `u256` to the sign-extended value of a 32-bit signed integer. + * @param {i32} value - The 32-bit signed integer. + * @returns {this} - The current instance. + */ + @inline + setI32(value: i32): this { + let mask: u64 = value >> 63; + this.lo1 = value; this.lo2 = mask; this.hi1 = mask; this.hi2 = mask; + return this; + } + + /** + * Sets this `u256` to the specified 32-bit unsigned integer, clearing higher bits. + * @param {u32} value - The 32-bit unsigned integer. + * @returns {this} - The current instance. + */ + @inline + setU32(value: u32): this { + this.lo1 = value; this.lo2 = 0; this.hi1 = 0; this.hi2 = 0; + return this; + } + + /** + * Checks if this `u256` is equal to zero. + * @returns {boolean} - True if zero, false otherwise. + */ + @inline + isZero(): bool { + return !(this.lo1 | this.lo2 | this.hi1 | this.hi2); + } + + /** + * Performs a bitwise NOT operation (`~`) on the current `u256`. + * @returns {u256} - A new `u256` with inverted bits. + */ + @inline @operator.prefix('~') + not(): u256 { + return new u256(~this.lo1, ~this.lo2, ~this.hi1, ~this.hi2); + } + + /** + * A unary plus operator, returning the current `u256` without changes. + * @returns {u256} - The current `u256`. + */ + @inline @operator.prefix('+') + pos(): u256 { return this; } + + /** + * A unary negation operator (`-x`), computed as `~x + 1`. + * @returns {u256} - A new `u256` representing the negated value (mod 2^256). + */ + @operator.prefix('-') + neg(): u256 { + let lo1 = ~this.lo1, lo2 = ~this.lo2, hi1 = ~this.hi1, hi2 = ~this.hi2; + let sum = lo1 + 1; + let carry = (sum < lo1) ? 1 : 0; + lo1 = sum; + sum = lo2 + carry; + carry = (sum < lo2) ? 1 : 0; + lo2 = sum; + sum = hi1 + carry; + carry = (sum < hi1) ? 1 : 0; + hi1 = sum; + hi2 = hi2 + carry; + return new u256(lo1, lo2, hi1, hi2); + } + + @operator.prefix("++") + public preInc(): this { + let sum = this.lo1 + 1; + let carry = sum < this.lo1 ? 1 : 0; + this.lo1 = sum; + sum = this.lo2 + carry; + carry = sum < this.lo2 ? 1 : 0; + this.lo2 = sum; + sum = this.hi1 + carry; + carry = sum < this.hi1 ? 1 : 0; + this.hi1 = sum; + this.hi2 += carry; + return this; + } + + @operator.prefix("--") + public preDec(): this { + let diff = this.lo1 - 1; + let borrow = (diff > this.lo1) ? 1 : 0; + this.lo1 = diff; + diff = this.lo2 - borrow; + borrow = (diff > this.lo2) ? 1 : 0; + this.lo2 = diff; + diff = this.hi1 - borrow; + borrow = (diff > this.hi1) ? 1 : 0; + this.hi1 = diff; + this.hi2 -= borrow; + return this; + } + + @inline @operator.postfix('++') + postInc(): u256 { return this.clone().preInc(); } + + @inline @operator.postfix('--') + postDec(): u256 { return this.clone().preDec(); } + + /** + * Converts this `u256` to a generic type `T`. + * Supported types: bool, i8, u8, i16, u16, i32, u32, i64, u64, i128, u128, u256, u8[], Uint8Array, StaticArray, string. + * @returns {T} - The converted value. + */ + @inline + as(): T { + if (isReference()) { + let typeName = nameof(); + if (typeName.indexOf("Array") >= 0) return changetype(this.toBytes()); + else if (typeName.indexOf("Uint8Array") >= 0) return changetype(this.toUint8Array()); + else if (typeName.indexOf("StaticArray") >= 0) return changetype(this.toStaticBytes()); + else if (typeName.indexOf("String") >= 0) return changetype(this.toString()); + else if (typeName.indexOf("u128") >= 0) return changetype(this.toU128()); + else if (typeName.indexOf("i128") >= 0) return changetype(this.toI128()); + else if (typeName.indexOf("u256") >= 0) return changetype(this.toU256()); + else throw new TypeError(`Unsupported generic type ${typeName}`); + } else { + if (isInteger()) { + if (sizeof() == 1) return this.toU64(); + else if (sizeof() == 2) return this.toU64(); + else if (sizeof() == 4) return this.toU64(); + else if (sizeof() == 8) return this.toU64(); + else throw new TypeError(`Unsupported generic type ${nameof()}`); + } else if (isFloat()) { + return this.toU64(); + } else { + // bool + return this.toBool(); + } + } + } + + /** + * Converts this `u256` to a signed 128-bit integer (i128). + * The highest bit of the 256-bit value is sign bit for i128. + * @returns {i128} - The resulting `i128`. + */ + @inline + toI128(): i128 { + return new i128(this.lo1, (this.lo2 & 0x7FFFFFFFFFFFFFFF) | (this.hi2 & 0x8000000000000000)); + } + + /** + * Converts this `u256` to an unsigned 128-bit integer (u128). + * Truncates higher bits. + * @returns {u128} - The resulting `u128`. + */ + @inline + toU128(): u128 { return new u128(this.lo1, this.lo2); } + + /** + * Returns this `u256` itself, effectively a no-op for `u256`. + * @returns {u256} - The current `u256`. + */ + @inline + toU256(): this { return this; } + + /** + * Converts this `u256` to a signed 64-bit integer (i64). + * Truncates and treats the highest bit of the 256-bit as sign. + * @returns {i64} - The resulting 64-bit signed integer. + */ + @inline + toI64(): i64 { return ( (this.lo1 & 0x7FFFFFFFFFFFFFFF) | (this.hi2 & 0x8000000000000000) ); } + + /** + * Converts this `u256` to an unsigned 64-bit integer (u64). + * Truncates higher bits. + * @returns {u64} - The resulting 64-bit unsigned integer. + */ + @inline + toU64(): u64 { return this.lo1; } + + /** + * Converts this `u256` to a signed 32-bit integer (i32). + * @returns {i32} - The resulting 32-bit signed integer. + */ + @inline + toI32(): i32 { return this.toI64(); } + + /** + * Converts this `u256` to an unsigned 32-bit integer (u32). + * Truncates higher bits. + * @returns {u32} - The resulting 32-bit unsigned integer. + */ + @inline + toU32(): u32 { return this.lo1; } + + /** + * Checks if the `u256` is non-zero, then returns `true`; otherwise `false`. + * @returns {boolean} - True if non-zero, otherwise false. + */ + @inline + toBool(): bool { return (this.lo1 | this.lo2 | this.hi1 | this.hi2); } + + /** + * Converts this `u256` to an array of 32 bytes (u8[]). + * @param {boolean} [bigEndian=false] - Output in big-endian if true, else little-endian. + * @returns {u8[]} - The resulting byte array. + */ + @inline + toBytes(bigEndian: bool = false): u8[] { + let result = new Array(32); + this.toArrayBuffer(changetype(result.dataStart), bigEndian); + return result; + } + + /** + * Converts this `u256` to a static array of 32 bytes (StaticArray). + * @param {boolean} [bigEndian=false] - Output in big-endian if true, else little-endian. + * @returns {StaticArray} - The resulting static byte array. + */ + @inline + toStaticBytes(bigEndian: bool = false): StaticArray { + let result = new StaticArray(32); + this.toArrayBuffer(changetype(result), bigEndian); + return result; + } + + /** + * Converts this `u256` to a `Uint8Array` of length 32. + * @param {boolean} [bigEndian=false] - Output in big-endian if true, else little-endian. + * @returns {Uint8Array} - The resulting `Uint8Array`. + */ + @inline + toUint8Array(bigEndian: bool = false): Uint8Array { + let result = new Uint8Array(32); + this.toArrayBuffer(changetype(result.dataStart), bigEndian); + return result; + } + + /** + * Creates and returns a clone (deep copy) of this `u256`. + * @returns {u256} - A new `u256` instance with the same value. + */ + clone(): u256 { return new u256(this.lo1, this.lo2, this.hi1, this.hi2); } + + /** + * Converts this `u256` to a string in either decimal or hexadecimal format. + * @param {i32} [radix=10] - The base (10 or 16). + * @throws {Error} If `radix` is not 10 or 16. + * @returns {string} - The string representation of the `u256`. + */ + toString(radix: i32 = 10): string { + assert(radix == 10 || radix == 16, 'radix argument must be between 10 or 16'); + if (this.isZero()) return '0'; + if (radix == 16) { + let result = ''; + let shift: i32 = 252 - (u256.clz(this) & ~3); + while (shift >= 0) { + // @ts-ignore + result += HEX_CHARS.charAt(((this >> shift).lo1 & 15)); + shift -= 4; + } + return result; + } + return u256toDecimalString(this); + } + + /** + * @private + * Stores this `u256` into a buffer in little-endian format. + * @param {usize} buffer - The buffer start pointer. + */ + // --- INTERNAL HELPERS FOR DIV OPTIMIZATION --- + // These allow in-place mutation to avoid allocations inside the div loop. + + /** In-place subtraction. Assumes this >= other. */ + @inline + private subAssign(other: u256): void { + let lo1 = sub64(this.lo1, other.lo1, 0); + let b1 = __u256carrySub; + let lo2 = sub64(this.lo2, other.lo2, b1); + let b2 = __u256carrySub; + let hi1 = sub64(this.hi1, other.hi1, b2); + let b3 = __u256carrySub; + let hi2 = sub64(this.hi2, other.hi2, b3); + this.lo1 = lo1; this.lo2 = lo2; this.hi1 = hi1; this.hi2 = hi2; + } + + /** In-place bit set: this |= (1 << bit) */ + @inline + private orAssignBit(bit: i32): void { + const bits = 64; + const seg = (bit / bits) | 0; + const shift = bit % bits; + // FIX: Explicitly cast literal 1 to u64 to ensure proper 64-bit shifting + const mask: u64 = 1 << shift; + if (seg == 0) this.lo1 |= mask; + else if (seg == 1) this.lo2 |= mask; + else if (seg == 2) this.hi1 |= mask; + else if (seg == 3) this.hi2 |= mask; + } + + /** In-place right shift by 1. */ + @inline + private rshiftOne(): void { + this.lo1 = (this.lo1 >>> 1) | (this.lo2 << 63); + this.lo2 = (this.lo2 >>> 1) | (this.hi1 << 63); + this.hi1 = (this.hi1 >>> 1) | (this.hi2 << 63); + this.hi2 = (this.hi2 >>> 1); + } + + @inline + private toArrayBufferLE(buffer: usize): void { + store(buffer, this.lo1, 0); + store(buffer, this.lo2, 8); + store(buffer, this.hi1, 16); + store(buffer, this.hi2, 24); + } + + /** + * @private + * Stores this `u256` into a buffer in big-endian format. + * @param {usize} buffer - The buffer start pointer. + */ + @inline + private toArrayBufferBE(buffer: usize): void { + store(buffer, bswap(this.hi2), 0); + store(buffer, bswap(this.hi1), 8); + store(buffer, bswap(this.lo2), 16); + store(buffer, bswap(this.lo1), 24); + } + + /** + * @private + * Stores this `u256` into a buffer in either little-endian or big-endian format. + * @param {usize} buffer - The buffer start pointer. + * @param {boolean} [bigEndian=false] - Use big-endian if true, else little-endian. + */ + @inline + private toArrayBuffer(buffer: usize, bigEndian: bool = false): void { + if (bigEndian) this.toArrayBufferBE(buffer); + else this.toArrayBufferLE(buffer); + } +} diff --git a/std/assembly/bignum/utils.ts b/std/assembly/bignum/utils.ts new file mode 100644 index 0000000000..1f780b1516 --- /dev/null +++ b/std/assembly/bignum/utils.ts @@ -0,0 +1,260 @@ +import { CharCode } from "util/string"; +import { u128 } from "./integer/u128"; +import { u256 } from "./integer/u256"; + +// @ts-ignore: decorator +@lazy const MaxBaseForExponent128 = memory.data([ + u64.MAX_VALUE, // 0 + u64.MAX_VALUE, // 1 + u64.MAX_VALUE, // 2 + 0x000006597FA94F5B, // 3 + 0x00000000FFFFFFFF, // 4 + 0x0000000003080C00, // 5 + 0x0000000000285145, // 6 + 0x000000000004E045, // 7 + 0x000000000000FFFF, // 8 + 0x0000000000004AA8, // 9 + 0x0000000000001BDB, // 10 + 0x0000000000000C6F, // 11 + 0x0000000000000659, // 12 + 0x0000000000000398, // 13 + 0x0000000000000235, // 14 + 0x0000000000000172, // 15 + 0x00000000000000FF, // 16 + 0x00000000000000B8, // 17 + 0x000000000000008A, // 18 + 0x000000000000006A, // 19 + 0x0000000000000054, // 20 + 0x0000000000000044, // 21 + 0x0000000000000038, // 22 + 0x000000000000002F, // 23 + 0x0000000000000028, // 24 + 0x0000000000000022, // 25 + 0x000000000000001E, // 26 + 0x000000000000001A, // 27 + 0x0000000000000017, // 28 + 0x0000000000000015, // 29 + 0x0000000000000013, // 30 + 0x0000000000000011, // 31 + 0x000000000000000F, // 32 + 0x000000000000000E, // 33 + 0x000000000000000D, // 34 + 0x000000000000000C, // 35 + 0x000000000000000B, // 36 + 0x000000000000000B, // 37 + 0x000000000000000A, // 38 +]); + +// Use LUT wrapped by function for lazy compilation +// @ts-ignore: decorator +@lazy const RadixCharsTable = memory.data([ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 36, 36, 36, 36, 36, 36, + 36, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 36, 36, 36, 36, + 36, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 +]); + +// @ts-ignore: decorator +@inline export function isPowerOverflow128(base: u128, exponent: i32): bool { + // never overflow + if (exponent <= 1 || base <= u128.One) { + return false; + } + // always overflow + if (base.hi != 0 || exponent >= 128) { + return true; + } + var low = base.lo; + if (low <= 10) { + switch (low) { + case 2: + return exponent > 127; + case 3: + return exponent > 80; + case 4: + return exponent > 63; + case 5: + return exponent > 55; + case 6: + return exponent > 49; + case 7: + return exponent > 45; + case 8: + return exponent > 42; + case 9: + return exponent > 40; + case 10: + return exponent > 38; + } + } + if (exponent >= 38) return true; + return low > load(MaxBaseForExponent128 + (exponent << 3)); +} + +// helper function for utoa +function processU64(digits: Uint8Array, value: u64): void { + var length = digits.length - 1; + for (let i = 63; i != -1; --i) { + for (let j = 0; j <= length; ++j) { + unchecked(digits[j] += (u8(digits[j] >= 5) * 3)); + } + for (let j = length; j != -1; --j) { + let d = unchecked(digits[j]) << 1; + if (j < length) unchecked(digits[j + 1] |= u8(d > 15)); + unchecked(digits[j] = d & 15); + } + unchecked(digits[0] += u8((value & (1 << i)) != 0)); + } +} + +export function u128toDecimalString(value: u128): string { + var length = 40; + var digits = new Uint8Array(length); + var result = "", start = false; + + processU64(digits, value.hi); + processU64(digits, value.lo); + + for (let i = length - 1; i != -1; --i) { + let d = unchecked(digits[i]); + if (!start && d != 0) start = true; + if (start) { + assert(d <= 9); + result += String.fromCharCode(0x30 + d); + } + } + return result; +} + +export function u256toDecimalString(value: u256): string { + var length = 78; + var digits = new Uint8Array(length); + var result = "", start = false; + + processU64(digits, value.hi2); + processU64(digits, value.hi1); + processU64(digits, value.lo2); + processU64(digits, value.lo1); + + for (let i = length - 1; i != -1; --i) { + let d = unchecked(digits[i]); + if (!start && d != 0) start = true; + if (start) { + assert(d <= 9); + result += String.fromCharCode(0x30 + d); + } + } + return result; +} + +export function atou128(str: string, radix: i32 = 10): u128 { + if (radix < 2 || radix > 36) { + throw new Error("Invalid radix"); + } + var len = str.length; + if (!len) return u128.Zero; + + var first = str.charCodeAt(0); + if (len == 1 && first == CharCode._0) { + return u128.Zero; + } + var isNeg = first == CharCode.MINUS; + // @ts-ignore + var index = i32(isNeg | (first == CharCode.PLUS)); + + if (str.charCodeAt(index) == CharCode._0) { + let second = str.charCodeAt(++index); + if ((second | 32) == CharCode.x) { + radix = 16; + ++index; + } else if ((second | 32) == CharCode.o) { + radix = 8; + ++index; + } else if ((second | 32) == CharCode.b) { + radix = 2; + ++index; + } else if (second == CharCode._0) { + // skip leading zeros + while (index < len && str.charCodeAt(index) == CharCode._0) ++index; + } + } + var result = u128.Zero; + var table = RadixCharsTable; + + if (index >= len) return result; + + if (ASC_SHRINK_LEVEL >= 1) { + let radix128 = u128.fromU64(radix); + do { + let n: u32 = str.charCodeAt(index) - CharCode._0; + if (n > (CharCode.z - CharCode._0)) break; + + let num = load(table + n); + if (num >= radix) break; + + // @ts-ignore + result *= radix128; + // @ts-ignore + result += u128.fromU64(num); + } while (++index < len); + } else { + switch (radix) { + case 2: { + do { + let num: u32 = str.charCodeAt(index) - CharCode._0; + if (num >= 2) break; + // @ts-ignore + result <<= 1; + // @ts-ignore + result |= u128.fromU64(num); + } while (++index < len); + break; + } + case 10: { + do { + let num: u32 = str.charCodeAt(index) - CharCode._0; + if (num >= 10) break; + // @ts-ignore + result = (result << 3) + (result << 1); + // @ts-ignore + result += u128.fromU64(num); + } while (++index < len); + break; + } + case 16: { + do { + let n: u32 = str.charCodeAt(index) - CharCode._0; + if (n > (CharCode.z - CharCode._0)) break; + + let num = load(table + n); + if (num >= 16) break; + + // @ts-ignore + result <<= 4; + // @ts-ignore + result |= u128.fromU64(num); + } while (++index < len); + break; + } + default: { + let radix128 = u128.fromU64(radix); + do { + let n: u32 = str.charCodeAt(index) - CharCode._0; + if (n > (CharCode.z - CharCode._0)) break; + + let num = load(table + n); + if (num >= radix) break; + + // @ts-ignore + result *= radix128; + // @ts-ignore + result += u128.fromU64(num); + } while (++index < len); + break; + } + } + } + // @ts-ignore + return isNeg ? -result : result; +} diff --git a/std/assembly/bindings/dom.ts b/std/assembly/bindings/dom.ts index 85c59ffc46..6f3f26e5ee 100644 --- a/std/assembly/bindings/dom.ts +++ b/std/assembly/bindings/dom.ts @@ -134,7 +134,7 @@ export declare namespace Object { export declare namespace Date { @external("env", "Date.now") - export function now(): f64; + export function now(): u64; } export declare namespace console { @@ -280,12 +280,5 @@ export declare namespace performance { export function now(): f64; } -export namespace crypto { - export function getRandomValues(array: Uint8Array): void { - let values = getRandomValuesN(array.length); - array.set(values); - } - @external("env", "crypto.getRandomValuesN") - @external.js("let a = new Uint8Array(n); crypto.getRandomValues(a); return a;") - export declare function getRandomValuesN(n: u32): Uint8Array; -} +// crypto.getRandomValues moved to the dedicated Web Crypto module +// (std/assembly/crypto.ts), backed by the `crypto.fill_random` host import. diff --git a/std/assembly/bindings/toildb.ts b/std/assembly/bindings/toildb.ts new file mode 100644 index 0000000000..0537faaa19 --- /dev/null +++ b/std/assembly/bindings/toildb.ts @@ -0,0 +1,273 @@ +// Host-import declarations for the ToilDB data API. The production edge +// (toil-backend `src/wasm/host/import_functions/db`) and the toiljs dev server +// both provide these under the `env` namespace. All byte regions are passed as +// a (pointer, length) pair into guest linear memory. +// +// Collections are resolved by name ONCE at module init (`resolveCollection`), +// which returns an opaque numeric handle; request-time ops pass the handle. +// +// Return convention (see toildb/ABI.md): +// >= 0 success: a length (a value stashed for `takeResult`), a count, a +// boolean (0/1), a tag, or 0 (ok). +// -1 output buffer too small (retry `takeResult` with a bigger buffer). +// -2 absent (a normal null / not-found). +// <= -1000 a typed failure; the diagnostic is TDL(|v| - 1000). +// +// Variable-length results (a fetched value, a patched record, a claim owner) +// use the two-step pull: the op returns the stashed length, then the guest +// allocates a buffer and calls `takeResult` to copy the bytes out. +// +// `idemPtr` is 0 for none, otherwise a pointer to a 16-byte idempotency key. +// +// This is the guest half of the ABI contract; the byte framing of keys/values +// is the `@data` binary codec (`DataWriter`/`DataReader`). + +export namespace toildbHost { + // Resolve a collection by its "/" name; writes the u32 handle + // to outHandlePtr. Returns 0 on success or a negative TDL code. + // @ts-ignore: decorator + @external("env", "data.resolve_collection") + export declare function resolveCollection(namePtr: usize, nameLen: i32, outHandlePtr: usize): i32; + + // record.get -> value length (stashed) | -2 absent | negative error. + // @ts-ignore: decorator + @external("env", "data.get") + export declare function get(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // record bounded multi-get. Input at keysPtr: u32 count + per key (u32 len + + // bytes). Result (stashed): u32 count + per item u8 present + // (+ u32 schema_version + u32 len + bytes when present), in request order. + // @ts-ignore: decorator + @external("env", "data.get_many") + export declare function getMany(handle: u32, keysPtr: usize, keysLen: i32): i32; + + // record.exists -> 1 | 0 | negative error. + // @ts-ignore: decorator + @external("env", "data.exists") + export declare function exists(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // record.create -> 0 ok | AlreadyExists/typed code. + // @ts-ignore: decorator + @external("env", "data.create") + export declare function create( + handle: u32, + keyPtr: usize, + keyLen: i32, + valPtr: usize, + valLen: i32, + idemPtr: usize + ): i32; + + // record.patch -> length of the new record (stashed) | negative error. + // @ts-ignore: decorator + @external("env", "data.patch") + export declare function patch( + handle: u32, + keyPtr: usize, + keyLen: i32, + patchPtr: usize, + patchLen: i32, + idemPtr: usize + ): i32; + + // record.delete -> 0 ok | negative error. + // @ts-ignore: decorator + @external("env", "data.delete") + export declare function del(handle: u32, keyPtr: usize, keyLen: i32, idemPtr: usize): i32; + + // record consume-once fetch-and-delete -> prior value length (stashed) | -2. + // @ts-ignore: decorator + @external("env", "data.get_delete") + export declare function getDelete(handle: u32, keyPtr: usize, keyLen: i32, idemPtr: usize): i32; + + // unique.lookup -> owner value length (stashed) | -2 absent. + // @ts-ignore: decorator + @external("env", "data.unique_lookup") + export declare function uniqueLookup(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // unique.claim -> 0 Claimed | 1 AlreadyClaimed (owner stashed) | 2 owned-by-caller | neg. + // @ts-ignore: decorator + @external("env", "data.unique_claim") + export declare function uniqueClaim( + handle: u32, + keyPtr: usize, + keyLen: i32, + valPtr: usize, + valLen: i32, + idemPtr: usize + ): i32; + + // unique.release -> 0 ok | neg (Conflict if not the owner). + // @ts-ignore: decorator + @external("env", "data.unique_release") + export declare function uniqueRelease( + handle: u32, + keyPtr: usize, + keyLen: i32, + valPtr: usize, + valLen: i32, + idemPtr: usize + ): i32; + + // view.get -> view value length (stashed) | -2 absent | negative error. + // @ts-ignore: decorator + @external("env", "data.view_get") + export declare function viewGet(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // view.publish -> 0 ok | negative error (derive/job only; the host gate enforces). + // @ts-ignore: decorator + @external("env", "data.view_publish") + export declare function viewPublish( + handle: u32, + keyPtr: usize, + keyLen: i32, + valPtr: usize, + valLen: i32, + idemPtr: usize + ): i32; + + // membership.contains -> 1 present | 0 absent | negative error. + // @ts-ignore: decorator + @external("env", "data.membership_contains") + export declare function membershipContains( + handle: u32, setPtr: usize, setLen: i32, memberPtr: usize, memberLen: i32 + ): i32; + + // membership.add -> 0 ok | negative error. + // @ts-ignore: decorator + @external("env", "data.membership_add") + export declare function membershipAdd( + handle: u32, setPtr: usize, setLen: i32, memberPtr: usize, memberLen: i32, idemPtr: usize + ): i32; + + // membership.remove -> 0 ok | negative error. + // @ts-ignore: decorator + @external("env", "data.membership_remove") + export declare function membershipRemove( + handle: u32, setPtr: usize, setLen: i32, memberPtr: usize, memberLen: i32, idemPtr: usize + ): i32; + + // membership.list(limit) -> framed-list length (stashed) | negative error. + // The blob is `u32 count` then per member `u32 schema_version + u32 len + bytes`. + // @ts-ignore: decorator + @external("env", "data.membership_list") + export declare function membershipList(handle: u32, setPtr: usize, setLen: i32, limit: i32): i32; + + // capacity.set_total(total: i64) -> 0 ok | negative error (job/derive only). + // @ts-ignore: decorator + @external("env", "data.capacity_set_total") + export declare function capacitySetTotal( + handle: u32, keyPtr: usize, keyLen: i32, total: i64, idemPtr: usize + ): i32; + + // capacity.available -> 8 (the i64 available stashed as 8 LE bytes) | neg. + // @ts-ignore: decorator + @external("env", "data.capacity_available") + export declare function capacityAvailable(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // capacity.reserve(amount: i64, ttl_ms: i64) -> 8 (the u64 reservation id + // stashed) | -2 insufficient | negative error. + // @ts-ignore: decorator + @external("env", "data.capacity_reserve") + export declare function capacityReserve( + handle: u32, keyPtr: usize, keyLen: i32, amount: i64, ttlMs: i64, idemPtr: usize + ): i32; + + // capacity.confirm(reservationId: i64) -> 1 confirmed | 0 unknown | neg. + // @ts-ignore: decorator + @external("env", "data.capacity_confirm") + export declare function capacityConfirm( + handle: u32, keyPtr: usize, keyLen: i32, reservationId: i64, idemPtr: usize + ): i32; + + // capacity.cancel(reservationId: i64) -> 1 cancelled | 0 unknown/confirmed | neg. + // @ts-ignore: decorator + @external("env", "data.capacity_cancel") + export declare function capacityCancel( + handle: u32, keyPtr: usize, keyLen: i32, reservationId: i64, idemPtr: usize + ): i32; + + // counter.get -> 8 (the i64 sum stashed as 8 LE bytes) | negative error. + // @ts-ignore: decorator + @external("env", "data.counter_get") + export declare function counterGet(handle: u32, keyPtr: usize, keyLen: i32): i32; + + // counter.add(delta: i64) -> 0 ok | negative error. + // @ts-ignore: decorator + @external("env", "data.counter_add") + export declare function counterAdd( + handle: u32, + keyPtr: usize, + keyLen: i32, + delta: i64, + idemPtr: usize + ): i32; + + // events.append -> 0 ok | negative error. + // @ts-ignore: decorator + @external("env", "data.append") + export declare function append( + handle: u32, + keyPtr: usize, + keyLen: i32, + evPtr: usize, + evLen: i32, + idemPtr: usize + ): i32; + + // events.latest(limit) -> framed-list length (stashed) | negative error. + // The blob is `u32 count` then per event `u32 schema_version + u32 len + bytes`, newest first. + // @ts-ignore: decorator + @external("env", "data.latest") + export declare function latest(handle: u32, keyPtr: usize, keyLen: i32, limit: i32): i32; + + // events.append_once -> 1 appended | 0 duplicate (deduped on eventId) | <0 error. + // Idempotent append: a retried call with the same eventId never doubles the event. + // @ts-ignore: decorator + @external("env", "data.append_once") + export declare function appendOnce( + handle: u32, + keyPtr: usize, + keyLen: i32, + evidPtr: usize, + evidLen: i32, + evPtr: usize, + evLen: i32 + ): i32; + + // records.enqueue -> 0 ok | <0 error (Conflict if a concurrent write won, NotFound + // if absent). A version-checked replace of an existing record's value. + // @ts-ignore: decorator + @external("env", "data.enqueue") + export declare function enqueue( + handle: u32, + keyPtr: usize, + keyLen: i32, + valPtr: usize, + valLen: i32, + idemPtr: usize + ): i32; + + // Copy the last stashed variable-length result into outPtr (outLen must equal + // the length the producing op returned). Returns bytes written, or -1 if the + // buffer is too small. + // @ts-ignore: decorator + @external("env", "data.take_result") + export declare function takeResult(outPtr: usize, outLen: i32): i32; + + // The schema version the LAST value-returning read's row was written under, so + // the generated decoder can default fields added since / reject an unknown + // layout. A u32 version rides in the non-negative range; -1 means the last op + // returned no value (or the host does not track a version). Does not drain the + // result stash, so it may be read before or after `takeResult`. + // @ts-ignore: decorator + @external("env", "data.result_schema_version") + export declare function resultSchemaVersion(): i64; + + // 1 if the current call's kind may issue a record write, else 0. The generated + // reader uses it to skip the rewrite-on-read convergence write in a read-only + // `@query` (where it would be rejected) rather than attempt a doomed write. + // @ts-ignore: decorator + @external("env", "data.write_allowed") + export declare function writeAllowed(): i32; +} diff --git a/std/assembly/bindings/webcrypto.ts b/std/assembly/bindings/webcrypto.ts new file mode 100644 index 0000000000..34968e8b9c --- /dev/null +++ b/std/assembly/bindings/webcrypto.ts @@ -0,0 +1,106 @@ +// Host-import declarations for the Web Crypto surface. The production edge +// (toil-backend `src/wasm/host/import_functions/crypto`) and the toiljs dev +// server both provide these under the `env` namespace. All byte regions are +// passed as a (pointer, length) pair into guest linear memory. +// +// Variable-length results use a two-step pull: the op returns the result +// length (>= 0) or a negative error code; the guest then allocates a buffer of +// that length and calls `take_result` to copy the bytes out. +// +// This is the guest half of the ABI contract in `crypto/algorithms.ts`; the +// byte layout of the packed params buffer is defined there. + +export namespace webcrypto { + // CSPRNG: fill outPtr..outPtr+len with random bytes. + // @ts-ignore: decorator + @external("env", "crypto.fill_random") + export declare function fillRandom(outPtr: usize, len: i32): void; + + // Write 16 random bytes to outPtr (guest applies RFC 4122 v4 bits + format). + // @ts-ignore: decorator + @external("env", "crypto.random_uuid") + export declare function randomUuid(outPtr: usize): void; + + // Copy the last stashed variable-length result into outPtr (outLen must equal + // the length the producing op returned). Returns bytes written. + // @ts-ignore: decorator + @external("env", "crypto.take_result") + export declare function takeResult(outPtr: usize, outLen: i32): i32; + + // digest(alg, data) -> digest length (stashed) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.digest") + export declare function digest(alg: i32, dataPtr: usize, dataLen: i32): i32; + + // importKey -> opaque key handle (>= 0) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.import_key") + export declare function importKey( + format: i32, + keyPtr: usize, + keyLen: i32, + paramsPtr: usize, + paramsLen: i32, + extractable: i32, + usages: i32 + ): i32; + + // exportKey -> exported length (stashed) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.export_key") + export declare function exportKey(format: i32, handle: i32): i32; + + // encrypt / decrypt -> output length (stashed) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.encrypt") + export declare function encrypt( + handle: i32, + paramsPtr: usize, + paramsLen: i32, + dataPtr: usize, + dataLen: i32 + ): i32; + // @ts-ignore: decorator + @external("env", "crypto.decrypt") + export declare function decrypt( + handle: i32, + paramsPtr: usize, + paramsLen: i32, + dataPtr: usize, + dataLen: i32 + ): i32; + + // sign -> signature length (stashed) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.sign") + export declare function sign( + handle: i32, + paramsPtr: usize, + paramsLen: i32, + dataPtr: usize, + dataLen: i32 + ): i32; + + // verify -> 1 (valid), 0 (invalid), or negative error. + // @ts-ignore: decorator + @external("env", "crypto.verify") + export declare function verify( + handle: i32, + paramsPtr: usize, + paramsLen: i32, + sigPtr: usize, + sigLen: i32, + dataPtr: usize, + dataLen: i32 + ): i32; + + // deriveBits -> derived length (stashed) or negative error. + // @ts-ignore: decorator + @external("env", "crypto.derive_bits") + export declare function deriveBits( + handle: i32, + paramsPtr: usize, + paramsLen: i32, + lengthBits: i32 + ): i32; +} diff --git a/std/assembly/bitflags.ts b/std/assembly/bitflags.ts new file mode 100644 index 0000000000..6f07d99dac --- /dev/null +++ b/std/assembly/bitflags.ts @@ -0,0 +1,53 @@ +// Type-safe bit manipulation utilities. +// Pure @inline functions — each compiles to 1-2 wasm instructions. + +export namespace BitFlags { + + /** Check if all bits in `bit` are set in `flags`. */ + @inline export function has(flags: T, bit: T): bool { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return (flags & bit) == bit; + } + + /** Check if any bits in `mask` are set in `flags`. */ + @inline export function hasAny(flags: T, mask: T): bool { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return (flags & mask) != 0; + } + + /** Test whether bit at `index` is set. */ + @inline export function test(flags: T, index: i32): bool { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return (flags & (1 << index)) != 0; + } + + /** Set bits from `bit` in `flags`. */ + @inline export function set(flags: T, bit: T): T { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return flags | bit; + } + + /** Clear bits from `bit` in `flags`. */ + @inline export function clear(flags: T, bit: T): T { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return flags & ~bit; + } + + /** Toggle bits from `bit` in `flags`. */ + @inline export function toggle(flags: T, bit: T): T { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return flags ^ bit; + } + + /** Count number of set bits (population count). */ + @inline export function popcount(flags: T): i32 { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return popcnt(flags); + } + + /** Check if no bits are set. */ + @inline export function isEmpty(flags: T): bool { + if (!isInteger()) ERROR("BitFlags requires an integer type"); + return flags == 0; + } +} diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts index 1c23551993..d6327b104f 100644 --- a/std/assembly/builtins.ts +++ b/std/assembly/builtins.ts @@ -2603,13 +2603,32 @@ export abstract class i31 { // FIXME: usage of 'new' requires a class :( // @ts-ignore: decorator @external("env", "abort") @external.js("throw Error(`${message} in ${fileName}:${lineNumber}:${columnNumber}`);") -declare function abort( +declare function __abort_impl( message?: string | null, fileName?: string | null, lineNumber?: u32, columnNumber?: u32 ): void; +// When exception-handling is enabled, abort throws an Error that can be caught. +// When disabled, it calls the external abort function (host implementation). +function abort( + message: string | null = null, + fileName: string | null = null, + lineNumber: u32 = 0, + columnNumber: u32 = 0 +): void { + if (ASC_FEATURE_EXCEPTION_HANDLING) { + let fullMessage = message ? message : "abort"; + if (fileName) { + fullMessage += " in " + fileName + ":" + lineNumber.toString() + ":" + columnNumber.toString(); + } + throw new Error(fullMessage); + } else { + __abort_impl(message, fileName, lineNumber, columnNumber); + } +} + // @ts-ignore: decorator @external("env", "trace") @external.js("console.log(message, ...[a0, a1, a2, a3, a4].slice(0, n));") diff --git a/std/assembly/byteslice.ts b/std/assembly/byteslice.ts new file mode 100644 index 0000000000..d5d472db0d --- /dev/null +++ b/std/assembly/byteslice.ts @@ -0,0 +1,177 @@ +/// + +import { Pointer } from "./pointer"; +import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH } from "./util/error"; + +// Zero-alloc memory view: pointer + length with bounds-checked endian-aware reads/writes. +// Unlike DataView, does not own an ArrayBuffer — the viewed memory is unowned/raw. + +@final +export class ByteSlice { + readonly ptr: usize; + readonly length: i32; + + constructor(ptr: usize, length: i32) { + if (length < 0) throw new RangeError(E_INVALIDLENGTH); + this.ptr = ptr; + this.length = length; + } + + // --- Unsigned reads --- + + @inline getU8(offset: i32): u8 { + if (offset >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + return load(this.ptr + offset); + } + + @inline getU16(offset: i32, be: bool = true): u16 { + if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + @inline getU32(offset: i32, be: bool = true): u32 { + if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + @inline getU64(offset: i32, be: bool = true): u64 { + if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + // --- Signed reads --- + + @inline getI8(offset: i32): i8 { + if (offset >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + return load(this.ptr + offset); + } + + @inline getI16(offset: i32, be: bool = true): i16 { + if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + @inline getI32(offset: i32, be: bool = true): i32 { + if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + @inline getI64(offset: i32, be: bool = true): i64 { + if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + let v = load(this.ptr + offset); + return be ? bswap(v) : v; + } + + // --- Unsigned writes --- + + @inline setU8(offset: i32, value: u8): void { + if (offset >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, value); + } + + @inline setU16(offset: i32, value: u16, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + @inline setU32(offset: i32, value: u32, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + @inline setU64(offset: i32, value: u64, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + // --- Signed writes --- + + @inline setI8(offset: i32, value: i8): void { + if (offset >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, value); + } + + @inline setI16(offset: i32, value: i16, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 2 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + @inline setI32(offset: i32, value: i32, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 4 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + @inline setI64(offset: i32, value: i64, be: bool = true): void { + if ((offset >>> 31) | i32(offset + 8 > this.length)) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + offset, be ? bswap(value) : value); + } + + // --- Byte indexing operators --- + + @operator("[]") private __get(index: i32): u8 { + if (index >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + return load(this.ptr + index); + } + + @operator("[]=") private __set(index: i32, value: u8): void { + if (index >= this.length) throw new RangeError(E_INDEXOUTOFRANGE); + store(this.ptr + index, value); + } + + // --- Bulk operations --- + + slice(start: i32, end: i32 = this.length): ByteSlice { + let len = this.length; + if (start < 0) start = max(len + start, 0); + if (end < 0) end = max(len + end, 0); + start = min(start, len); + end = min(end, len); + let newLen = max(end - start, 0); + return new ByteSlice(this.ptr + start, newLen); + } + + copyTo(dst: ByteSlice, dstOff: i32 = 0, srcOff: i32 = 0, count: i32 = this.length - srcOff): void { + if ( + (count >>> 31) | + (srcOff >>> 31) | i32(srcOff + count > this.length) | + (dstOff >>> 31) | i32(dstOff + count > dst.length) + ) throw new RangeError(E_INDEXOUTOFRANGE); + memory.copy(dst.ptr + dstOff, this.ptr + srcOff, count); + } + + fill(value: u8, start: i32 = 0, end: i32 = this.length): void { + let len = this.length; + if (start < 0) start = max(len + start, 0); + if (end < 0) end = max(len + end, 0); + start = min(start, len); + end = min(end, len); + if (start < end) { + memory.fill(this.ptr + start, value, (end - start)); + } + } + + equals(other: ByteSlice): bool { + if (this.length != other.length) return false; + if (this.length == 0) return true; + return memory.compare(this.ptr, other.ptr, this.length) == 0; + } + + toPointer(): Pointer { + return new Pointer(this.ptr); + } + + toString(): string { + return "[object ByteSlice]"; + } + + // RT integration — ptr is raw usize, not managed + + @unsafe private __visit(_cookie: u32): void { + // no-op: ptr is raw, not a managed reference + } +} diff --git a/std/assembly/crypto.ts b/std/assembly/crypto.ts index 6a57cbac59..81f2fe01b6 100644 --- a/std/assembly/crypto.ts +++ b/std/assembly/crypto.ts @@ -1,9 +1,163 @@ +// Web Crypto for ToilScript — a synchronous SubtleCrypto plus ergonomic +// helpers, backed by metered host functions (see `bindings/webcrypto.ts` and +// the toil-backend `crypto` host module). +// +// Deviations from the web spec (ToilScript has no Promises): every method is +// synchronous and returns its value directly. Algorithm parameters are small +// classes (e.g. `AesGcmParams`) rather than object literals, and key usages are +// an i32 bitmask. RSA, on-host key generation, and the `jwk` format are not +// provided (RSA was dropped for an unfixable timing side-channel in the only +// pure-Rust implementation; keys are imported, never generated on-host). + +import { webcrypto } from "bindings/webcrypto"; +import { SubtleCrypto } from "crypto/subtle"; import { - crypto as crypto_binding -} from "bindings/dom"; + HmacImportParams, + HmacParams, + ALG_SHA_1, + ALG_SHA_256, + ALG_SHA_384, + ALG_SHA_512, + FMT_RAW, + USAGE_SIGN, +} from "crypto/algorithms"; +import { Encoding } from "encoding"; + +// Re-export the public surface so guests can import everything from "crypto". +export { SubtleCrypto } from "./crypto/subtle"; +export { CryptoKey, CryptoKeyPair } from "./crypto/key"; +export { + AlgorithmParams, + AesGcmParams, + AesCbcParams, + AesCtrParams, + HmacImportParams, + HmacParams, + Pbkdf2Params, + HkdfParams, + EcdsaParams, + EcKeyImportParams, + Ed25519Params, + X25519ImportParams, + EcdhParams, + algId, + algName, + formatId, + curveId, + cryptoError, + ALG_SHA_1, + ALG_SHA_256, + ALG_SHA_384, + ALG_SHA_512, + ALG_AES_GCM, + ALG_AES_CBC, + ALG_AES_CTR, + ALG_AES_KW, + ALG_HMAC, + ALG_ECDSA, + ALG_ED25519, + ALG_ECDH, + ALG_X25519, + ALG_HKDF, + ALG_PBKDF2, + ALG_SHA3_256, + ALG_SHA3_384, + ALG_SHA3_512, + FMT_RAW, + FMT_PKCS8, + FMT_SPKI, + FMT_JWK, + CURVE_P256, + CURVE_P384, + USAGE_ENCRYPT, + USAGE_DECRYPT, + USAGE_SIGN, + USAGE_VERIFY, + USAGE_DERIVE_KEY, + USAGE_DERIVE_BITS, + USAGE_WRAP_KEY, + USAGE_UNWRAP_KEY, +} from "./crypto/algorithms"; + +function utf8Bytes(s: string): Uint8Array { + return Uint8Array.wrap(String.UTF8.encode(s)); +} export namespace crypto { + /// The synchronous SubtleCrypto singleton. `@lazy` defers initialization to + /// first use so accessing `crypto.subtle` from global scope (without an + /// explicit import of "crypto") doesn't hit a cross-module init-order error. + // @ts-ignore: decorator + @lazy export const subtle: SubtleCrypto = new SubtleCrypto(); + + /// Fill `array` with cryptographically strong random bytes. export function getRandomValues(array: Uint8Array): void { - crypto_binding.getRandomValues(array); + webcrypto.fillRandom(array.dataStart, array.byteLength); + } + + /// An RFC 4122 version-4 UUID string. + export function randomUUID(): string { + let b = new Uint8Array(16); + webcrypto.randomUuid(b.dataStart); + b[6] = (b[6] & 0x0f) | 0x40; // version 4 + b[8] = (b[8] & 0x3f) | 0x80; // variant 10 + let h = toHex(b); + return ( + h.substring(0, 8) + + "-" + + h.substring(8, 12) + + "-" + + h.substring(12, 16) + + "-" + + h.substring(16, 20) + + "-" + + h.substring(20, 32) + ); + } + + // --- Ergonomic digest helpers (thin wrappers over subtle.digest) ---------- + export function sha1(data: Uint8Array): Uint8Array { + return subtle.digest(ALG_SHA_1, data); + } + export function sha256(data: Uint8Array): Uint8Array { + return subtle.digest(ALG_SHA_256, data); + } + export function sha384(data: Uint8Array): Uint8Array { + return subtle.digest(ALG_SHA_384, data); + } + export function sha512(data: Uint8Array): Uint8Array { + return subtle.digest(ALG_SHA_512, data); + } + + // String-input variants (UTF-8 encode, then hash). + export function sha1Text(s: string): Uint8Array { + return sha1(utf8Bytes(s)); + } + export function sha256Text(s: string): Uint8Array { + return sha256(utf8Bytes(s)); + } + export function sha384Text(s: string): Uint8Array { + return sha384(utf8Bytes(s)); + } + export function sha512Text(s: string): Uint8Array { + return sha512(utf8Bytes(s)); + } + + /// One-shot HMAC-SHA-256 over raw key + message bytes. + export function hmacSha256(key: Uint8Array, msg: Uint8Array): Uint8Array { + let k = subtle.importKey(FMT_RAW, key, new HmacImportParams(ALG_SHA_256), false, USAGE_SIGN); + return subtle.sign(new HmacParams(), k, msg); + } + export function hmacSha256Text(key: Uint8Array, msg: string): Uint8Array { + return hmacSha256(key, utf8Bytes(msg)); + } + + /// Lowercase hex string of `bytes` (handy for displaying digests). + export function toHex(bytes: Uint8Array): string { + let hexLen = bytes.length * 2; + if (hexLen == 0) return ""; + let dst = new Uint8Array(hexLen); + Encoding.Hex.encode(bytes.dataStart, bytes.length, dst.dataStart); + return String.UTF8.decode(dst.buffer); } } diff --git a/std/assembly/crypto/algorithms.ts b/std/assembly/crypto/algorithms.ts new file mode 100644 index 0000000000..b37531a820 --- /dev/null +++ b/std/assembly/crypto/algorithms.ts @@ -0,0 +1,316 @@ +// The Web Crypto ABI contract: algorithm / format / curve ids, usage flags, +// error codes, and the packed-parameter classes. This is the single source of +// truth that the toil-backend Rust host and the toiljs dev mock mirror. +// +// Parameterized algorithms can't ride in plain scalars (AssemblyScript has no +// object literals across the host boundary), so each `*Params` class serializes +// itself into one little-endian buffer via `DataWriter` (whose `writeBytes` +// emits a u32 length prefix + bytes — the blob format the host reads). + +import { DataWriter } from "data"; + +// --- Algorithm ids (also used as the inner-hash id for HMAC/ECDSA/KDF) ------ +export const ALG_SHA_1: i32 = 1; +export const ALG_SHA_256: i32 = 2; +export const ALG_SHA_384: i32 = 3; +export const ALG_SHA_512: i32 = 4; +export const ALG_SHA3_256: i32 = 5; +export const ALG_SHA3_384: i32 = 6; +export const ALG_SHA3_512: i32 = 7; +export const ALG_AES_GCM: i32 = 10; +export const ALG_AES_CBC: i32 = 11; +export const ALG_AES_CTR: i32 = 12; +export const ALG_AES_KW: i32 = 13; +export const ALG_HMAC: i32 = 20; +export const ALG_ECDSA: i32 = 32; +export const ALG_ED25519: i32 = 33; +export const ALG_ECDH: i32 = 50; +export const ALG_X25519: i32 = 51; +export const ALG_HKDF: i32 = 52; +export const ALG_PBKDF2: i32 = 53; + +// --- Key formats ------------------------------------------------------------ +export const FMT_RAW: i32 = 0; +export const FMT_PKCS8: i32 = 1; +export const FMT_SPKI: i32 = 2; +export const FMT_JWK: i32 = 3; // not supported (throws guest-side) + +// --- Named curves ----------------------------------------------------------- +export const CURVE_P256: i32 = 1; +export const CURVE_P384: i32 = 2; +export const CURVE_P521: i32 = 3; // not supported + +// --- Key-usage bit flags (OR together) -------------------------------------- +export const USAGE_ENCRYPT: i32 = 0x01; +export const USAGE_DECRYPT: i32 = 0x02; +export const USAGE_SIGN: i32 = 0x04; +export const USAGE_VERIFY: i32 = 0x08; +export const USAGE_DERIVE_KEY: i32 = 0x10; +export const USAGE_DERIVE_BITS: i32 = 0x20; +export const USAGE_WRAP_KEY: i32 = 0x40; +export const USAGE_UNWRAP_KEY: i32 = 0x80; + +function asciiUpper(s: string): string { + let out = ""; + for (let i = 0; i < s.length; i++) { + let c = s.charCodeAt(i); + if (c >= 97 && c <= 122) c -= 32; + out += String.fromCharCode(c); + } + return out; +} + +/// Map a Web Crypto algorithm name (case-insensitive) to its id, or 0. +export function algId(name: string): i32 { + let n = asciiUpper(name); + if (n == "SHA-1") return ALG_SHA_1; + if (n == "SHA-256") return ALG_SHA_256; + if (n == "SHA-384") return ALG_SHA_384; + if (n == "SHA-512") return ALG_SHA_512; + if (n == "SHA3-256") return ALG_SHA3_256; + if (n == "SHA3-384") return ALG_SHA3_384; + if (n == "SHA3-512") return ALG_SHA3_512; + if (n == "AES-GCM") return ALG_AES_GCM; + if (n == "AES-CBC") return ALG_AES_CBC; + if (n == "AES-CTR") return ALG_AES_CTR; + if (n == "AES-KW") return ALG_AES_KW; + if (n == "HMAC") return ALG_HMAC; + if (n == "ECDSA") return ALG_ECDSA; + if (n == "ED25519") return ALG_ED25519; + if (n == "ECDH") return ALG_ECDH; + if (n == "X25519") return ALG_X25519; + if (n == "HKDF") return ALG_HKDF; + if (n == "PBKDF2") return ALG_PBKDF2; + return 0; +} + +/// Reverse of {@link algId}, for `CryptoKey.algorithmName`. +export function algName(id: i32): string { + if (id == ALG_SHA_1) return "SHA-1"; + if (id == ALG_SHA_256) return "SHA-256"; + if (id == ALG_SHA_384) return "SHA-384"; + if (id == ALG_SHA_512) return "SHA-512"; + if (id == ALG_AES_GCM) return "AES-GCM"; + if (id == ALG_AES_CBC) return "AES-CBC"; + if (id == ALG_AES_CTR) return "AES-CTR"; + if (id == ALG_AES_KW) return "AES-KW"; + if (id == ALG_HMAC) return "HMAC"; + if (id == ALG_ECDSA) return "ECDSA"; + if (id == ALG_ED25519) return "Ed25519"; + if (id == ALG_ECDH) return "ECDH"; + if (id == ALG_X25519) return "X25519"; + if (id == ALG_HKDF) return "HKDF"; + if (id == ALG_PBKDF2) return "PBKDF2"; + return "unknown"; +} + +/// Map a key-format name to its id, or -1. +export function formatId(name: string): i32 { + let n = asciiUpper(name); + if (n == "RAW") return FMT_RAW; + if (n == "PKCS8") return FMT_PKCS8; + if (n == "SPKI") return FMT_SPKI; + if (n == "JWK") return FMT_JWK; + return -1; +} + +/// Map a named-curve string to its id, or 0. +export function curveId(name: string): i32 { + let n = asciiUpper(name); + if (n == "P-256") return CURVE_P256; + if (n == "P-384") return CURVE_P384; + if (n == "P-521") return CURVE_P521; + return 0; +} + +/// Decode a negative host error code into a human-readable message. +export function cryptoError(code: i32): string { + if (code == -1) return "crypto: operation failed"; + if (code == -2) return "crypto: invalid key handle"; + if (code == -3) return "crypto: unsupported algorithm"; + if (code == -4) return "crypto: invalid parameters"; + if (code == -5) return "crypto: operation failed (bad tag, padding, or key)"; + if (code == -6) return "crypto: key usage not permitted"; + if (code == -7) return "crypto: key is not extractable"; + return "crypto: error " + code.toString(); +} + +const EMPTY: Uint8Array = new Uint8Array(0); + +// --- Parameter classes ------------------------------------------------------ + +/// Base for every algorithm-parameter object. Subclasses write a fixed +/// `(algId, hash)` header followed by their tail. +export abstract class AlgorithmParams { + abstract serialize(w: DataWriter): void; + /// Pack into a standalone little-endian buffer for the host. + pack(): Uint8Array { + let w = new DataWriter(); + this.serialize(w); + return w.toBytes(); + } +} + +export class AesGcmParams extends AlgorithmParams { + iv: Uint8Array; + additionalData: Uint8Array; + tagLength: i32; + constructor(iv: Uint8Array, additionalData: Uint8Array = EMPTY, tagLength: i32 = 128) { + super(); + this.iv = iv; + this.additionalData = additionalData; + this.tagLength = tagLength; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_AES_GCM); + w.writeI32(0); + w.writeBytes(this.iv); + w.writeI32(this.tagLength); + w.writeBytes(this.additionalData); + } +} + +export class AesCbcParams extends AlgorithmParams { + iv: Uint8Array; + constructor(iv: Uint8Array) { + super(); + this.iv = iv; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_AES_CBC); + w.writeI32(0); + w.writeBytes(this.iv); + } +} + +export class AesCtrParams extends AlgorithmParams { + counter: Uint8Array; + length: i32; // counter length in bits (must be 128) + constructor(counter: Uint8Array, length: i32 = 128) { + super(); + this.counter = counter; + this.length = length; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_AES_CTR); + w.writeI32(0); + w.writeBytes(this.counter); + w.writeI32(this.length); + } +} + +/// HMAC key import: carries the inner hash id. +export class HmacImportParams extends AlgorithmParams { + hash: i32; + constructor(hash: i32) { + super(); + this.hash = hash; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_HMAC); + w.writeI32(this.hash); + } +} + +/// HMAC sign/verify: the hash is taken from the key. +export class HmacParams extends AlgorithmParams { + serialize(w: DataWriter): void { + w.writeI32(ALG_HMAC); + w.writeI32(0); + } +} + +export class Pbkdf2Params extends AlgorithmParams { + hash: i32; + salt: Uint8Array; + iterations: u32; + constructor(hash: i32, salt: Uint8Array, iterations: u32) { + super(); + this.hash = hash; + this.salt = salt; + this.iterations = iterations; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_PBKDF2); + w.writeI32(this.hash); + w.writeU32(this.iterations); + w.writeBytes(this.salt); + } +} + +export class HkdfParams extends AlgorithmParams { + hash: i32; + salt: Uint8Array; + info: Uint8Array; + constructor(hash: i32, salt: Uint8Array, info: Uint8Array = EMPTY) { + super(); + this.hash = hash; + this.salt = salt; + this.info = info; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_HKDF); + w.writeI32(this.hash); + w.writeBytes(this.salt); + w.writeBytes(this.info); + } +} + +/// ECDSA sign/verify: carries the hash (P-256↔SHA-256, P-384↔SHA-384). +export class EcdsaParams extends AlgorithmParams { + hash: i32; + constructor(hash: i32) { + super(); + this.hash = hash; + } + serialize(w: DataWriter): void { + w.writeI32(ALG_ECDSA); + w.writeI32(this.hash); + } +} + +/// EC key import (ECDSA or ECDH): carries the named curve. +export class EcKeyImportParams extends AlgorithmParams { + alg: i32; // ALG_ECDSA or ALG_ECDH + namedCurve: i32; + constructor(alg: i32, namedCurve: i32) { + super(); + this.alg = alg; + this.namedCurve = namedCurve; + } + serialize(w: DataWriter): void { + w.writeI32(this.alg); + w.writeI32(0); + w.writeI32(this.namedCurve); + } +} + +export class Ed25519Params extends AlgorithmParams { + serialize(w: DataWriter): void { + w.writeI32(ALG_ED25519); + w.writeI32(0); + } +} + +export class X25519ImportParams extends AlgorithmParams { + serialize(w: DataWriter): void { + w.writeI32(ALG_X25519); + w.writeI32(0); + } +} + +/// ECDH / X25519 deriveBits: carries the peer public key handle. +export class EcdhParams extends AlgorithmParams { + alg: i32; // ALG_ECDH or ALG_X25519 + publicKeyHandle: i32; + constructor(alg: i32, publicKeyHandle: i32) { + super(); + this.alg = alg; + this.publicKeyHandle = publicKeyHandle; + } + serialize(w: DataWriter): void { + w.writeI32(this.alg); + w.writeI32(0); + w.writeI32(this.publicKeyHandle); + } +} diff --git a/std/assembly/crypto/key.ts b/std/assembly/crypto/key.ts new file mode 100644 index 0000000000..7d207e2e86 --- /dev/null +++ b/std/assembly/crypto/key.ts @@ -0,0 +1,38 @@ +// Opaque CryptoKey wrapping a per-request host keystore handle. Handles are +// only valid within the request that created them (the host keystore is reset +// between requests), so a CryptoKey must not be cached across dispatches. + +import { algName } from "crypto/algorithms"; + +export class CryptoKey { + readonly handle: i32; + readonly type: string; // "secret" | "public" | "private" + readonly extractable: bool; + readonly algorithm: i32; // ALG_* + readonly usages: i32; // USAGE_* bitmask + + constructor(handle: i32, type: string, extractable: bool, algorithm: i32, usages: i32) { + this.handle = handle; + this.type = type; + this.extractable = extractable; + this.algorithm = algorithm; + this.usages = usages; + } + + algorithmName(): string { + return algName(this.algorithm); + } + + hasUsage(u: i32): bool { + return (this.usages & u) != 0; + } +} + +export class CryptoKeyPair { + readonly publicKey: CryptoKey; + readonly privateKey: CryptoKey; + constructor(publicKey: CryptoKey, privateKey: CryptoKey) { + this.publicKey = publicKey; + this.privateKey = privateKey; + } +} diff --git a/std/assembly/crypto/subtle.ts b/std/assembly/crypto/subtle.ts new file mode 100644 index 0000000000..ce8031ffe3 --- /dev/null +++ b/std/assembly/crypto/subtle.ts @@ -0,0 +1,147 @@ +// Synchronous SubtleCrypto. Mirrors the Web Crypto method names but, because +// ToilScript has no Promises, every method returns its value directly rather +// than a Promise. Variable-length results use the two-step pull (op returns +// the length, then `take_result` copies the bytes out). + +import { webcrypto } from "bindings/webcrypto"; +import { CryptoKey } from "crypto/key"; +import { + AlgorithmParams, + cryptoError, + FMT_RAW, + FMT_PKCS8, + FMT_SPKI, + FMT_JWK, + ALG_AES_GCM, + ALG_AES_CBC, + ALG_AES_CTR, + ALG_AES_KW, + ALG_HMAC, + ALG_PBKDF2, + ALG_HKDF, +} from "crypto/algorithms"; + +/// Pull a stashed variable-length result out of the host, or throw on error. +function drain(len: i32): Uint8Array { + if (len < 0) throw new Error(cryptoError(len)); + let out = new Uint8Array(len); + if (len > 0) webcrypto.takeResult(out.dataStart, len); + return out; +} + +function isSymmetricAlg(alg: i32): bool { + return ( + alg == ALG_AES_GCM || + alg == ALG_AES_CBC || + alg == ALG_AES_CTR || + alg == ALG_AES_KW || + alg == ALG_HMAC || + alg == ALG_PBKDF2 || + alg == ALG_HKDF + ); +} + +export class SubtleCrypto { + // `algorithm` is a hash-id selector: an `ALG_SHA_*` const (NOT a magic string). + digest(algorithm: i32, data: Uint8Array): Uint8Array { + return drain(webcrypto.digest(algorithm, data.dataStart, data.byteLength)); + } + + // `format` is an `FMT_*` selector const (FMT_RAW / FMT_PKCS8 / FMT_SPKI). + importKey( + format: i32, + keyData: Uint8Array, + algorithm: AlgorithmParams, + extractable: bool, + usages: i32 + ): CryptoKey { + if (format == FMT_JWK) throw new Error("jwk key format is not supported"); + let p = algorithm.pack(); + let alg = load(p.dataStart); // first packed field is the alg id + let handle = webcrypto.importKey( + format, + keyData.dataStart, + keyData.byteLength, + p.dataStart, + p.byteLength, + extractable ? 1 : 0, + usages + ); + if (handle < 0) throw new Error(cryptoError(handle)); + + let type: string; + if (format == FMT_PKCS8) type = "private"; + else if (format == FMT_SPKI) type = "public"; + else type = isSymmetricAlg(alg) ? "secret" : "public"; + + return new CryptoKey(handle, type, extractable, alg, usages); + } + + // `format` is an `FMT_*` selector const (FMT_RAW / FMT_PKCS8 / FMT_SPKI). + exportKey(format: i32, key: CryptoKey): Uint8Array { + if (format == FMT_JWK) throw new Error("jwk key format is not supported"); + return drain(webcrypto.exportKey(format, key.handle)); + } + + encrypt(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array { + let p = algorithm.pack(); + return drain( + webcrypto.encrypt(key.handle, p.dataStart, p.byteLength, data.dataStart, data.byteLength) + ); + } + + decrypt(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array { + let p = algorithm.pack(); + return drain( + webcrypto.decrypt(key.handle, p.dataStart, p.byteLength, data.dataStart, data.byteLength) + ); + } + + sign(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array { + let p = algorithm.pack(); + return drain( + webcrypto.sign(key.handle, p.dataStart, p.byteLength, data.dataStart, data.byteLength) + ); + } + + verify( + algorithm: AlgorithmParams, + key: CryptoKey, + signature: Uint8Array, + data: Uint8Array + ): bool { + let p = algorithm.pack(); + let r = webcrypto.verify( + key.handle, + p.dataStart, + p.byteLength, + signature.dataStart, + signature.byteLength, + data.dataStart, + data.byteLength + ); + if (r < 0) throw new Error(cryptoError(r)); + return r == 1; + } + + /// Derive `length` bits from `baseKey` (PBKDF2/HKDF/ECDH/X25519). + deriveBits(algorithm: AlgorithmParams, baseKey: CryptoKey, length: i32): Uint8Array { + let p = algorithm.pack(); + return drain(webcrypto.deriveBits(baseKey.handle, p.dataStart, p.byteLength, length)); + } + + /// Composed from deriveBits + importKey. Unlike the web API, the derived bit + /// length is passed explicitly (`lengthBits`) since ToilScript can't infer + /// it from `derivedKeyAlgorithm` the way the spec does. + deriveKey( + algorithm: AlgorithmParams, + baseKey: CryptoKey, + lengthBits: i32, + derivedKeyAlgorithm: AlgorithmParams, + extractable: bool, + usages: i32 + ): CryptoKey { + let bits = this.deriveBits(algorithm, baseKey, lengthBits); + return this.importKey(FMT_RAW, bits, derivedKeyAlgorithm, extractable, usages); + } +} diff --git a/std/assembly/data.ts b/std/assembly/data.ts new file mode 100644 index 0000000000..536f63f33f --- /dev/null +++ b/std/assembly/data.ts @@ -0,0 +1,167 @@ +/** + * Binary buffers for the `@data` tagged codec. + * + * `DataWriter` is a growable little-endian byte buffer written through direct + * linear-memory stores (wasm `store`/`load` are little-endian, so scalar writes + * are near native, no `DataView`). `DataReader` reads them back, tracking an + * `ok` flag so malformed input yields safe defaults instead of a trap. + * + * Both are zero-import globals (this is a top-level library entry), so the + * compiler-generated `encode`/`decode` reference them with no imports. The + * 128/256-bit integer types are the native std ones. + * + * Wire layout: fixed-width little-endian scalars; `bool` is one byte; strings + * and raw byte blobs are a `u32` byte-length prefix followed by the bytes; + * `u128`/`i128` are two 64-bit limbs (lo then hi), `u256`/`i256` are four. + */ + +export class DataWriter { + private buf: Uint8Array; + private off: i32 = 0; + + constructor(capacity: i32 = 64) { + this.buf = new Uint8Array(capacity > 0 ? capacity : 1); + } + + /** Reserve `extra` bytes, growing if needed, and return the write pointer. */ + private reserve(extra: i32): usize { + const need = this.off + extra; + const cap = this.buf.length; + if (need > cap) { + let n = cap; + while (n < need) n = n << 1; + const bigger = new Uint8Array(n); + memory.copy(bigger.dataStart, this.buf.dataStart, this.off); + this.buf = bigger; + } + const ptr = this.buf.dataStart + this.off; + this.off += extra; + return ptr; + } + + writeU8(value: u8): DataWriter { store(this.reserve(1), value); return this; } + writeU16(value: u16): DataWriter { store(this.reserve(2), value); return this; } + writeU32(value: u32): DataWriter { store(this.reserve(4), value); return this; } + writeU64(value: u64): DataWriter { store(this.reserve(8), value); return this; } + writeI8(value: i8): DataWriter { store(this.reserve(1), value); return this; } + writeI16(value: i16): DataWriter { store(this.reserve(2), value); return this; } + writeI32(value: i32): DataWriter { store(this.reserve(4), value); return this; } + writeI64(value: i64): DataWriter { store(this.reserve(8), value); return this; } + writeF32(value: f32): DataWriter { store(this.reserve(4), value); return this; } + writeF64(value: f64): DataWriter { store(this.reserve(8), value); return this; } + writeBool(value: bool): DataWriter { return this.writeU8(value ? 1 : 0); } + + writeBytes(bytes: Uint8Array): DataWriter { + const len = bytes.length; + this.writeU32(len); + if (len > 0) memory.copy(this.reserve(len), bytes.dataStart, len); + return this; + } + + writeString(value: string): DataWriter { + const utf8 = String.UTF8.encode(value); + const len = utf8.byteLength; + this.writeU32(len); + if (len > 0) memory.copy(this.reserve(len), changetype(utf8), len); + return this; + } + + writeU128(value: u128): DataWriter { return this.writeU64(value.lo).writeU64(value.hi); } + writeI128(value: i128): DataWriter { return this.writeU64(value.lo).writeI64(value.hi); } + + writeU256(value: u256): DataWriter { + return this.writeU64(value.lo1).writeU64(value.lo2).writeU64(value.hi1).writeU64(value.hi2); + } + + writeI256(value: i256): DataWriter { + return this.writeI64(value.lo1).writeI64(value.lo2).writeI64(value.hi1).writeI64(value.hi2); + } + + /** Number of bytes written so far. */ + length(): i32 { return this.off; } + + /** A copy of exactly the bytes written. */ + toBytes(): Uint8Array { + const out = new Uint8Array(this.off); + if (this.off > 0) memory.copy(out.dataStart, this.buf.dataStart, this.off); + return out; + } +} + +export class DataReader { + private buf: Uint8Array; + private off: i32 = 0; + /** Cleared to false if any read ran past the end of the buffer. */ + ok: bool = true; + + constructor(bytes: Uint8Array) { + this.buf = bytes; + } + + private has(n: i32): bool { + if (n < 0 || this.off + n > this.buf.length) { + this.ok = false; + return false; + } + return true; + } + + private at(n: i32): usize { + const ptr = this.buf.dataStart + this.off; + this.off += n; + return ptr; + } + + readU8(): u8 { return this.has(1) ? load(this.at(1)) : 0; } + readU16(): u16 { return this.has(2) ? load(this.at(2)) : 0; } + readU32(): u32 { return this.has(4) ? load(this.at(4)) : 0; } + readU64(): u64 { return this.has(8) ? load(this.at(8)) : 0; } + readI8(): i8 { return this.has(1) ? load(this.at(1)) : 0; } + readI16(): i16 { return this.has(2) ? load(this.at(2)) : 0; } + readI32(): i32 { return this.has(4) ? load(this.at(4)) : 0; } + readI64(): i64 { return this.has(8) ? load(this.at(8)) : 0; } + readF32(): f32 { return this.has(4) ? load(this.at(4)) : 0; } + readF64(): f64 { return this.has(8) ? load(this.at(8)) : 0; } + readBool(): bool { return this.readU8() != 0; } + + readBytes(): Uint8Array { + const len = this.readU32(); + if (!this.has(len)) return new Uint8Array(0); + const out = new Uint8Array(len); + if (len > 0) memory.copy(out.dataStart, this.at(len), len); + return out; + } + + readString(): string { + const len = this.readU32(); + if (!this.has(len)) return ""; + return String.UTF8.decodeUnsafe(this.at(len), len); + } + + readU128(): u128 { + const lo = this.readU64(); + return new u128(lo, this.readU64()); + } + + readI128(): i128 { + const lo = this.readU64(); + return new i128(lo, this.readI64()); + } + + readU256(): u256 { + const lo1 = this.readU64(); + const lo2 = this.readU64(); + const hi1 = this.readU64(); + return new u256(lo1, lo2, hi1, this.readU64()); + } + + readI256(): i256 { + const lo1 = this.readI64(); + const lo2 = this.readI64(); + const hi1 = this.readI64(); + return new i256(lo1, lo2, hi1, this.readI64()); + } + + /** Bytes left to read. */ + remaining(): i32 { return this.buf.length - this.off; } +} diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 2f847e1786..624a35e3dc 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -37,8 +37,8 @@ export class Date { return ms; } - @inline static now(): i64 { - return Date_binding.now(); + @inline static now(): u64 { + return Date_binding.now(); } // It can parse only ISO 8601 inputs like YYYY-MM-DDTHH:MM:SS.000Z diff --git a/std/assembly/encoding.ts b/std/assembly/encoding.ts new file mode 100644 index 0000000000..758a8b2002 --- /dev/null +++ b/std/assembly/encoding.ts @@ -0,0 +1,151 @@ +import { Pointer } from "./pointer"; + +// Hex and varint encoding utilities. +// Inline functions for zero-overhead encoding/decoding. + +export namespace Encoding { + + export namespace Hex { + /** Encode bytes at `src` (length `srcLen`) to hex chars at `dst`. Returns chars written (srcLen * 2). */ + @inline export function encode(src: usize, srcLen: i32, dst: usize): i32 { + for (let i: i32 = 0; i < srcLen; ++i) { + encodeByte(load(src + i), dst + (i << 1)); + } + return srcLen << 1; + } + + /** Decode hex chars at `src` (length `srcLen`, must be even) to bytes at `dst`. Returns bytes written, or -1 on error. */ + @inline export function decode(src: usize, srcLen: i32, dst: usize): i32 { + if (srcLen & 1) return -1; // odd length + let outLen = srcLen >> 1; + for (let i: i32 = 0; i < outLen; ++i) { + let b = decodeByte(src + (i << 1)); + if (b < 0) return -1; + store(dst + i, b); + } + return outLen; + } + + /** Encode a single byte to 2 hex chars at `dst`. */ + @inline export function encodeByte(value: u8, dst: usize): void { + let hi = (value >>> 4) & 0x0F; + let lo = value & 0x0F; + store(dst, hi < 10 ? hi + 48 : hi + 87); // '0'-'9' or 'a'-'f' + store(dst + 1, lo < 10 ? lo + 48 : lo + 87); + } + + /** Decode 2 hex chars at `src` to a byte value. Returns -1 on invalid input. */ + @inline export function decodeByte(src: usize): i32 { + let hi = decodeNibble(load(src)); + let lo = decodeNibble(load(src + 1)); + if ((hi | lo) < 0) return -1; + return (hi << 4) | lo; + } + + // Internal nibble decoder + @inline function decodeNibble(c: u8): i32 { + if (c >= 48 && c <= 57) return (c - 48); // '0'-'9' + if (c >= 97 && c <= 102) return (c - 87); // 'a'-'f' + if (c >= 65 && c <= 70) return (c - 55); // 'A'-'F' + return -1; + } + } + + export namespace Varint { + /** Encode a u32 as unsigned LEB128 at `dst`. Returns bytes written. */ + @inline export function encodeU32(value: u32, dst: usize): i32 { + let i: i32 = 0; + while (value >= 0x80) { + store(dst + i, ((value & 0x7F) | 0x80)); + value >>= 7; + ++i; + } + store(dst + i, value); + return i + 1; + } + + /** Encode a u64 as unsigned LEB128 at `dst`. Returns bytes written. */ + @inline export function encodeU64(value: u64, dst: usize): i32 { + let i: i32 = 0; + while (value >= 0x80) { + store(dst + i, (((value & 0x7F)) | 0x80)); + value >>= 7; + ++i; + } + store(dst + i, value); + return i + 1; + } + + /** Decode an unsigned LEB128-encoded u32 from `src`. Writes bytes consumed to `bytesRead`. Max 5 bytes. */ + @inline export function decodeU32(src: usize, bytesRead: Pointer): u32 { + let result: u32 = 0; + let shift: u32 = 0; + let i: i32 = 0; + let b: u8; + do { + b = load(src + i); + result |= (b & 0x7F) << shift; + shift += 7; + ++i; + if (i >= 5) break; // u32 needs at most 5 LEB128 bytes + } while (b & 0x80); + bytesRead.value = i; + return result; + } + + /** Decode an unsigned LEB128-encoded u64 from `src`. Writes bytes consumed to `bytesRead`. Max 10 bytes. */ + @inline export function decodeU64(src: usize, bytesRead: Pointer): u64 { + let result: u64 = 0; + let shift: u64 = 0; + let i: i32 = 0; + let b: u8; + do { + b = load(src + i); + result |= (b & 0x7F) << shift; + shift += 7; + ++i; + if (i >= 10) break; // u64 needs at most 10 LEB128 bytes + } while (b & 0x80); + bytesRead.value = i; + return result; + } + + /** Encode a u64 as Bitcoin CompactSize at `dst`. Returns bytes written. */ + @inline export function encodeCompact(value: u64, dst: usize): i32 { + if (value < 0xFD) { + store(dst, value); + return 1; + } else if (value <= 0xFFFF) { + store(dst, 0xFD); + store(dst + 1, value); // LE + return 3; + } else if (value <= 0xFFFFFFFF) { + store(dst, 0xFE); + store(dst + 1, value); // LE + return 5; + } else { + store(dst, 0xFF); + store(dst + 1, value); // LE + return 9; + } + } + + /** Decode a Bitcoin CompactSize from `src`. Writes bytes consumed to `bytesRead`. */ + @inline export function decodeCompact(src: usize, bytesRead: Pointer): u64 { + let first = load(src); + if (first < 0xFD) { + bytesRead.value = 1; + return first; + } else if (first == 0xFD) { + bytesRead.value = 3; + return load(src + 1); + } else if (first == 0xFE) { + bytesRead.value = 5; + return load(src + 1); + } else { + bytesRead.value = 9; + return load(src + 1); + } + } + } +} diff --git a/std/assembly/endian.ts b/std/assembly/endian.ts new file mode 100644 index 0000000000..508049a101 --- /dev/null +++ b/std/assembly/endian.ts @@ -0,0 +1,45 @@ +// Zero-overhead endian conversion utilities. +// Wasm is little-endian; protocols (Bitcoin, networking) often need big-endian. + +export namespace Endian { + + /** Load a value from memory in big-endian byte order. */ + @inline export function loadBE(ptr: usize, offset: usize = 0): T { + return bswap(load(ptr + offset)); + } + + /** Store a value to memory in big-endian byte order. */ + @inline export function storeBE(ptr: usize, value: T, offset: usize = 0): void { + store(ptr + offset, bswap(value)); + } + + /** Load a value from memory in little-endian byte order (identity on wasm). */ + @inline export function loadLE(ptr: usize, offset: usize = 0): T { + return load(ptr + offset); + } + + /** Store a value to memory in little-endian byte order (identity on wasm). */ + @inline export function storeLE(ptr: usize, value: T, offset: usize = 0): void { + store(ptr + offset, value); + } + + /** Convert a value to big-endian byte order (bswap on wasm). */ + @inline export function toBE(value: T): T { + return bswap(value); + } + + /** Convert a value from big-endian byte order (bswap on wasm). */ + @inline export function fromBE(value: T): T { + return bswap(value); + } + + /** Convert a value to little-endian byte order (identity on wasm). */ + @inline export function toLE(value: T): T { + return value; + } + + /** Convert a value from little-endian byte order (identity on wasm). */ + @inline export function fromLE(value: T): T { + return value; + } +} diff --git a/std/assembly/fixedarray.ts b/std/assembly/fixedarray.ts new file mode 100644 index 0000000000..1b12cd586e --- /dev/null +++ b/std/assembly/fixedarray.ts @@ -0,0 +1,173 @@ +/// + +import { Runtime } from "shared/runtime"; +import { BLOCK_MAXSIZE } from "./rt/common"; +import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_EMPTYARRAY, E_CAPACITYEXCEEDED } from "./util/error"; + +// Pre-allocated contiguous array with fixed capacity. +// Single buffer, no dynamic growth, zero GC overhead under runtime=memory. + +@final +export class FixedArray { + [key: number]: T; + + private dataPtr: usize = 0; + private capacity_: i32 = 0; + private length_: i32 = 0; + + constructor(capacity: i32) { + if (capacity > BLOCK_MAXSIZE >>> alignof()) throw new RangeError(E_INVALIDLENGTH); + + let bufferSize = capacity << alignof(); + let ptr: usize; + if (ASC_RUNTIME == Runtime.Memory) { + ptr = __alloc(bufferSize); + } else { + ptr = __new(bufferSize, idof()); + } + if (ASC_RUNTIME != Runtime.Incremental) { + memory.fill(ptr, 0, bufferSize); + } + this.dataPtr = ptr; + this.capacity_ = capacity; + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), ptr, false); + } + } + + get length(): i32 { + return this.length_; + } + + set length(value: i32) { + if (value > this.capacity_) throw new RangeError(E_INVALIDLENGTH); + this.length_ = value; + } + + get capacity(): i32 { + return this.capacity_; + } + + @operator("[]") private __get(index: i32): T { + if (index >= this.length_) throw new RangeError(E_INDEXOUTOFRANGE); + return load(this.dataPtr + (index << alignof())); + } + + @unsafe @operator("{}") private __uget(index: i32): T { + return load(this.dataPtr + (index << alignof())); + } + + @operator("[]=") private __set(index: i32, value: T): void { + if (index >= this.length_) throw new RangeError(E_INDEXOUTOFRANGE); + this.__uset(index, value); + } + + @unsafe @operator("{}=") private __uset(index: i32, value: T): void { + store(this.dataPtr + (index << alignof()), value); + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } + } + } + + push(value: T): i32 { + let len = this.length_; + if (len >= this.capacity_) throw new Error(E_CAPACITYEXCEEDED); + store(this.dataPtr + (len << alignof()), value); + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } + } + let newLen = len + 1; + this.length_ = newLen; + return newLen; + } + + pop(): T { + let len = this.length_; + if (len <= 0) throw new Error(E_EMPTYARRAY); + let newLen = len - 1; + let value = load(this.dataPtr + (newLen << alignof())); + this.length_ = newLen; + return value; + } + + swapDelete(index: i32): void { + let len = this.length_; + if (index >= len) throw new RangeError(E_INDEXOUTOFRANGE); + let newLen = len - 1; + if (index != newLen) { + let data = this.dataPtr; + let deletedOff = index << alignof(); + let lastOff = newLen << alignof(); + store(data + deletedOff, load(data + lastOff)); + } + this.length_ = newLen; + } + + indexOf(value: T, fromIndex: i32 = 0): i32 { + let length = this.length_; + if (length == 0 || fromIndex >= length) return -1; + if (fromIndex < 0) fromIndex = max(length + fromIndex, 0); + let data = this.dataPtr; + while (fromIndex < length) { + if (load(data + (fromIndex << alignof())) == value) return fromIndex; + ++fromIndex; + } + return -1; + } + + includes(value: T, fromIndex: i32 = 0): bool { + return this.indexOf(value, fromIndex) >= 0; + } + + fill(value: T, start: i32 = 0, end: i32 = i32.MAX_VALUE): this { + let len = this.length_; + start = start < 0 ? max(len + start, 0) : min(start, len); + end = end < 0 ? max(len + end, 0) : min(end, len); + let data = this.dataPtr; + if (isManaged()) { + for (let i = start; i < end; ++i) { + store(data + (i << alignof()), changetype(value)); + } + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), false); + } + } else { + for (let i = start; i < end; ++i) { + store(data + (i << alignof()), value); + } + } + return this; + } + + clear(): void { + this.length_ = 0; + } + + toString(): string { + return "[object FixedArray]"; + } + + // RT integration + + @unsafe private __visit(cookie: u32): void { + if (ASC_RUNTIME != Runtime.Memory) { + let data = this.dataPtr; + if (data) { + if (isManaged()) { + let cur = data; + let end = cur + (this.length_ << alignof()); + while (cur < end) { + let val = load(cur); + if (val) __visit(val, cookie); + cur += sizeof(); + } + } + __visit(data, cookie); + } + } + } +} diff --git a/std/assembly/fixedmap.ts b/std/assembly/fixedmap.ts new file mode 100644 index 0000000000..f3aa60b0d1 --- /dev/null +++ b/std/assembly/fixedmap.ts @@ -0,0 +1,326 @@ +/// + +import { HASH } from "./util/hash"; +import { Runtime } from "shared/runtime"; +import { E_KEYNOTFOUND } from "./util/error"; + +// Open-addressing hash map with linear probing. +// Single contiguous buffer, cache-friendly, zero GC overhead under runtime=memory. + +// @ts-ignore: decorator +@inline const SLOT_EMPTY: u8 = 0; +// @ts-ignore: decorator +@inline const SLOT_OCCUPIED: u8 = 1; +// @ts-ignore: decorator +@inline const SLOT_DELETED: u8 = 2; + +// @ts-ignore: decorator +@inline const FM_INITIAL_CAPACITY: i32 = 16; + +// Max load factor 75% = 3/4 +// @ts-ignore: decorator +@inline const FM_LOAD_N: i32 = 3; +// @ts-ignore: decorator +@inline const FM_LOAD_D: i32 = 4; + +/** Structure of a FixedMap slot. */ +@unmanaged class FixedMapSlot { + hash: u32; + state: u8; + key: K; + value: V; +} + +/** Computes the alignment of a slot. */ +// @ts-ignore: decorator +@inline +function FM_SLOT_ALIGN(): usize { + const maxkv = sizeof() > sizeof() ? sizeof() : sizeof(); + const maxAll = maxkv > sizeof() ? maxkv : sizeof(); + return maxAll - 1; +} + +/** Computes the aligned size of a slot. */ +// @ts-ignore: decorator +@inline +function FM_SLOT_SIZE(): usize { + const align = FM_SLOT_ALIGN(); + return (offsetof>() + align) & ~align; +} + +@final +export class FixedMap { + + private dataPtr: usize = 0; + private _capacity: i32 = 0; + private capacityMask: u32 = 0; + private _count: i32 = 0; + private _entriesUsed: i32 = 0; + + constructor(initialCapacity: i32 = FM_INITIAL_CAPACITY) { + if (initialCapacity < 4) initialCapacity = 4; + let cap: i32 = 4; + while (cap < initialCapacity) cap <<= 1; + + let bufferSize = cap * FM_SLOT_SIZE(); + let ptr: usize; + if (ASC_RUNTIME == Runtime.Memory) { + ptr = __alloc(bufferSize); + } else { + ptr = __new(bufferSize, idof()); + } + memory.fill(ptr, 0, bufferSize); + this.dataPtr = ptr; + this._capacity = cap; + this.capacityMask = (cap - 1); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), ptr, false); + } + } + + get size(): i32 { + return this._count; + } + + has(key: K): bool { + return this.findSlot(key, HASH(key)) != -1; + } + + @operator("[]") + get(key: K): V { + let idx = this.findSlot(key, HASH(key)); + if (idx == -1) throw new Error(E_KEYNOTFOUND); + let slot = changetype>( + this.dataPtr + idx * FM_SLOT_SIZE() + ); + return slot.value; + } + + @operator("[]=") + set(key: K, value: V): this { + // Check load factor before insert + if (this._entriesUsed * FM_LOAD_D >= this._capacity * FM_LOAD_N) { + this.rehash( + this._count * 2 > this._capacity + ? this._capacity << 1 + : this._capacity + ); + } + + let hashCode = HASH(key); + let mask = this.capacityMask; + let start = hashCode & mask; + let i = start; + let data = this.dataPtr; + let slotSize = FM_SLOT_SIZE(); + let firstDeleted: i32 = -1; + + do { + let slot = changetype>(data + i * slotSize); + let state = slot.state; + + if (state == SLOT_OCCUPIED) { + if (slot.hash == hashCode && slot.key == key) { + slot.value = value; + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } + } + return this; + } + } else if (state == SLOT_EMPTY) { + let insertIdx: u32 = firstDeleted != -1 ? firstDeleted : i; + let insertSlot = changetype>(data + insertIdx * slotSize); + insertSlot.hash = hashCode; + insertSlot.state = SLOT_OCCUPIED; + insertSlot.key = key; + insertSlot.value = value; + ++this._count; + if (firstDeleted == -1) ++this._entriesUsed; + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } + } + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } + } + return this; + } else { // DELETED + if (firstDeleted == -1) firstDeleted = i; + } + + i = (i + 1) & mask; + } while (i != start); + + // All slots are OCCUPIED or DELETED (shouldn't happen with load factor check) + // Insert at firstDeleted if available + if (firstDeleted != -1) { + let insertSlot = changetype>(data + firstDeleted * slotSize); + insertSlot.hash = hashCode; + insertSlot.state = SLOT_OCCUPIED; + insertSlot.key = key; + insertSlot.value = value; + ++this._count; + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } + } + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } + } + } + return this; + } + + delete(key: K): bool { + let idx = this.findSlot(key, HASH(key)); + if (idx == -1) return false; + let slot = changetype>( + this.dataPtr + idx * FM_SLOT_SIZE() + ); + slot.state = SLOT_DELETED; + --this._count; + return true; + } + + clear(): void { + memory.fill(this.dataPtr, 0, this._capacity * FM_SLOT_SIZE()); + this._count = 0; + this._entriesUsed = 0; + } + + keys(): K[] { + let data = this.dataPtr; + let cap = this._capacity; + let slotSize = FM_SLOT_SIZE(); + let keys = new Array(this._count); + let length = 0; + for (let i = 0; i < cap; ++i) { + let slot = changetype>(data + i * slotSize); + if (slot.state == SLOT_OCCUPIED) { + unchecked(keys[length++] = slot.key); + } + } + keys.length = length; + return keys; + } + + values(): V[] { + let data = this.dataPtr; + let cap = this._capacity; + let slotSize = FM_SLOT_SIZE(); + let values = new Array(this._count); + let length = 0; + for (let i = 0; i < cap; ++i) { + let slot = changetype>(data + i * slotSize); + if (slot.state == SLOT_OCCUPIED) { + unchecked(values[length++] = slot.value); + } + } + values.length = length; + return values; + } + + toString(): string { + return "[object FixedMap]"; + } + + @inline + private findSlot(key: K, hashCode: u32): i32 { + let mask = this.capacityMask; + let start = hashCode & mask; + let i = start; + let data = this.dataPtr; + let slotSize = FM_SLOT_SIZE(); + do { + let slot = changetype>(data + i * slotSize); + let state = slot.state; + if (state == SLOT_EMPTY) return -1; + if (state == SLOT_OCCUPIED && slot.hash == hashCode && slot.key == key) { + return i; + } + i = (i + 1) & mask; + } while (i != start); + return -1; + } + + private rehash(newCapacity: i32): void { + let oldData = this.dataPtr; + let oldCapacity = this._capacity; + let slotSize = FM_SLOT_SIZE(); + let newMask = (newCapacity - 1); + let bufferSize = newCapacity * slotSize; + + let newData: usize; + if (ASC_RUNTIME == Runtime.Memory) { + newData = __alloc(bufferSize); + } else { + newData = __new(bufferSize, idof()); + } + memory.fill(newData, 0, bufferSize); + + for (let i = 0; i < oldCapacity; ++i) { + let oldSlot = changetype>(oldData + i * slotSize); + if (oldSlot.state == SLOT_OCCUPIED) { + let h = oldSlot.hash; + let j = h & newMask; + while (changetype>(newData + j * slotSize).state != SLOT_EMPTY) { + j = (j + 1) & newMask; + } + let newSlot = changetype>(newData + j * slotSize); + newSlot.hash = h; + newSlot.state = SLOT_OCCUPIED; + newSlot.key = oldSlot.key; + newSlot.value = oldSlot.value; + } + } + + this.dataPtr = newData; + this._capacity = newCapacity; + this.capacityMask = newMask; + this._entriesUsed = this._count; + + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), newData, false); + } + } + + // RT integration + + @unsafe private __visit(cookie: u32): void { + if (ASC_RUNTIME != Runtime.Memory) { + let data = this.dataPtr; + if (data) { + if (isManaged() || isManaged()) { + let cap = this._capacity; + let slotSize = FM_SLOT_SIZE(); + for (let i = 0; i < cap; ++i) { + let slot = changetype>(data + i * slotSize); + if (slot.state == SLOT_OCCUPIED) { + if (isManaged()) { + let val = changetype(slot.key); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } + if (isManaged()) { + let val = changetype(slot.value); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } + } + } + } + __visit(data, cookie); + } + } + } +} diff --git a/std/assembly/fixedset.ts b/std/assembly/fixedset.ts new file mode 100644 index 0000000000..351a6ba879 --- /dev/null +++ b/std/assembly/fixedset.ts @@ -0,0 +1,275 @@ +/// + +import { HASH } from "./util/hash"; +import { Runtime } from "shared/runtime"; + +// Open-addressing hash set with linear probing. +// Single contiguous buffer, cache-friendly, zero GC overhead under runtime=memory. + +// @ts-ignore: decorator +@inline const SLOT_EMPTY: u8 = 0; +// @ts-ignore: decorator +@inline const SLOT_OCCUPIED: u8 = 1; +// @ts-ignore: decorator +@inline const SLOT_DELETED: u8 = 2; + +// @ts-ignore: decorator +@inline const FS_INITIAL_CAPACITY: i32 = 16; + +// Max load factor 75% = 3/4 +// @ts-ignore: decorator +@inline const FS_LOAD_N: i32 = 3; +// @ts-ignore: decorator +@inline const FS_LOAD_D: i32 = 4; + +/** Structure of a FixedSet slot. */ +@unmanaged class FixedSetSlot { + hash: u32; + state: u8; + key: T; +} + +/** Computes the alignment of a slot. */ +// @ts-ignore: decorator +@inline +function FS_SLOT_ALIGN(): usize { + const maxAll = sizeof() > sizeof() ? sizeof() : sizeof(); + return maxAll - 1; +} + +/** Computes the aligned size of a slot. */ +// @ts-ignore: decorator +@inline +function FS_SLOT_SIZE(): usize { + const align = FS_SLOT_ALIGN(); + return (offsetof>() + align) & ~align; +} + +@final +export class FixedSet { + + private dataPtr: usize = 0; + private _capacity: i32 = 0; + private capacityMask: u32 = 0; + private _count: i32 = 0; + private _entriesUsed: i32 = 0; + + constructor(initialCapacity: i32 = FS_INITIAL_CAPACITY) { + if (initialCapacity < 4) initialCapacity = 4; + let cap: i32 = 4; + while (cap < initialCapacity) cap <<= 1; + + let bufferSize = cap * FS_SLOT_SIZE(); + let ptr: usize; + if (ASC_RUNTIME == Runtime.Memory) { + ptr = __alloc(bufferSize); + } else { + ptr = __new(bufferSize, idof()); + } + memory.fill(ptr, 0, bufferSize); + this.dataPtr = ptr; + this._capacity = cap; + this.capacityMask = (cap - 1); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), ptr, false); + } + } + + get size(): i32 { + return this._count; + } + + @operator("[]") + has(key: T): bool { + return this.findSlot(key, HASH(key)) != -1; + } + + add(key: T): this { + // Check load factor before insert + if (this._entriesUsed * FS_LOAD_D >= this._capacity * FS_LOAD_N) { + this.rehash( + this._count * 2 > this._capacity + ? this._capacity << 1 + : this._capacity + ); + } + + let hashCode = HASH(key); + let mask = this.capacityMask; + let start = hashCode & mask; + let i = start; + let data = this.dataPtr; + let slotSize = FS_SLOT_SIZE(); + let firstDeleted: i32 = -1; + + do { + let slot = changetype>(data + i * slotSize); + let state = slot.state; + + if (state == SLOT_OCCUPIED) { + if (slot.hash == hashCode && slot.key == key) { + return this; // already exists + } + } else if (state == SLOT_EMPTY) { + let insertIdx: u32 = firstDeleted != -1 ? firstDeleted : i; + let insertSlot = changetype>(data + insertIdx * slotSize); + insertSlot.hash = hashCode; + insertSlot.state = SLOT_OCCUPIED; + insertSlot.key = key; + ++this._count; + if (firstDeleted == -1) ++this._entriesUsed; + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } + } + return this; + } else { // DELETED + if (firstDeleted == -1) firstDeleted = i; + } + + i = (i + 1) & mask; + } while (i != start); + + // Fallback: insert at firstDeleted + if (firstDeleted != -1) { + let insertSlot = changetype>(data + firstDeleted * slotSize); + insertSlot.hash = hashCode; + insertSlot.state = SLOT_OCCUPIED; + insertSlot.key = key; + ++this._count; + if (isManaged()) { + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } + } + } + return this; + } + + @operator("[]=") + private __set(key: T, value: bool): void { + if (value) this.add(key); + else this.delete(key); + } + + delete(key: T): bool { + let idx = this.findSlot(key, HASH(key)); + if (idx == -1) return false; + let slot = changetype>( + this.dataPtr + idx * FS_SLOT_SIZE() + ); + slot.state = SLOT_DELETED; + --this._count; + return true; + } + + clear(): void { + memory.fill(this.dataPtr, 0, this._capacity * FS_SLOT_SIZE()); + this._count = 0; + this._entriesUsed = 0; + } + + values(): T[] { + let data = this.dataPtr; + let cap = this._capacity; + let slotSize = FS_SLOT_SIZE(); + let values = new Array(this._count); + let length = 0; + for (let i = 0; i < cap; ++i) { + let slot = changetype>(data + i * slotSize); + if (slot.state == SLOT_OCCUPIED) { + unchecked(values[length++] = slot.key); + } + } + values.length = length; + return values; + } + + toString(): string { + return "[object FixedSet]"; + } + + @inline + private findSlot(key: T, hashCode: u32): i32 { + let mask = this.capacityMask; + let start = hashCode & mask; + let i = start; + let data = this.dataPtr; + let slotSize = FS_SLOT_SIZE(); + do { + let slot = changetype>(data + i * slotSize); + let state = slot.state; + if (state == SLOT_EMPTY) return -1; + if (state == SLOT_OCCUPIED && slot.hash == hashCode && slot.key == key) { + return i; + } + i = (i + 1) & mask; + } while (i != start); + return -1; + } + + private rehash(newCapacity: i32): void { + let oldData = this.dataPtr; + let oldCapacity = this._capacity; + let slotSize = FS_SLOT_SIZE(); + let newMask = (newCapacity - 1); + let bufferSize = newCapacity * slotSize; + + let newData: usize; + if (ASC_RUNTIME == Runtime.Memory) { + newData = __alloc(bufferSize); + } else { + newData = __new(bufferSize, idof()); + } + memory.fill(newData, 0, bufferSize); + + for (let i = 0; i < oldCapacity; ++i) { + let oldSlot = changetype>(oldData + i * slotSize); + if (oldSlot.state == SLOT_OCCUPIED) { + let h = oldSlot.hash; + let j = h & newMask; + while (changetype>(newData + j * slotSize).state != SLOT_EMPTY) { + j = (j + 1) & newMask; + } + let newSlot = changetype>(newData + j * slotSize); + newSlot.hash = h; + newSlot.state = SLOT_OCCUPIED; + newSlot.key = oldSlot.key; + } + } + + this.dataPtr = newData; + this._capacity = newCapacity; + this.capacityMask = newMask; + this._entriesUsed = this._count; + + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), newData, false); + } + } + + // RT integration + + @unsafe private __visit(cookie: u32): void { + if (ASC_RUNTIME != Runtime.Memory) { + let data = this.dataPtr; + if (data) { + if (isManaged()) { + let cap = this._capacity; + let slotSize = FS_SLOT_SIZE(); + for (let i = 0; i < cap; ++i) { + let slot = changetype>(data + i * slotSize); + if (slot.state == SLOT_OCCUPIED) { + let val = changetype(slot.key); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } + } + } + __visit(data, cookie); + } + } + } +} diff --git a/std/assembly/function.ts b/std/assembly/function.ts index dd32696330..b3a04447ea 100644 --- a/std/assembly/function.ts +++ b/std/assembly/function.ts @@ -1,3 +1,5 @@ +import { Runtime } from "shared/runtime"; + type auto = i32; @final export abstract class Function { @@ -32,7 +34,9 @@ type auto = i32; // RT integration @unsafe private __visit(cookie: u32): void { - // Env is either `null` (nop) or compiler-generated - __visit(this._env, cookie); + if (ASC_RUNTIME != Runtime.Memory) { + // Env is either `null` (nop) or compiler-generated + __visit(this._env, cookie); + } } } diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index a604397320..31bc2beab0 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1,9 +1,10 @@ /** - * Environment definitions for compiling AssemblyScript to WebAssembly using asc. + * Environment definitions for compiling ToilScript to WebAssembly using toilscript. * @module std/assembly *//***/ /// +/// // Types @@ -2230,7 +2231,7 @@ declare class Date { millisecond: i32 ): i64; /** Returns the current UTC timestamp in milliseconds. */ - static now(): i64; + static now(): u64; /** Parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC. */ static parse(dateString: string): Date; static fromString(dateString: string): Date; @@ -2417,6 +2418,184 @@ declare class Set { toString(): string; } +/** Zero-overhead typed pointer. `@unmanaged` — no allocation, no GC. */ +declare class Pointer { + /** Creates a pointer from a raw byte offset. */ + constructor(offset?: usize); + /** The raw byte offset. */ + readonly offset: usize; + /** Dereferences the pointer (load/store). */ + value: T; + /** Add raw byte offsets of two pointers. */ + @operator("+") add(other: Pointer): Pointer; + /** Subtract raw byte offsets of two pointers. */ + @operator("-") sub(other: Pointer): Pointer; + /** Increment pointer by sizeof bytes. */ + @operator.prefix("++") inc(): Pointer; + /** Decrement pointer by sizeof bytes. */ + @operator.prefix("--") dec(): Pointer; + /** Returns true if the pointer is null (offset == 0). */ + isNull(): bool; + /** Returns true if this pointer has the same offset as `other`. */ + equals(other: Pointer): bool; + /** Copies `count` elements from this pointer to `dst`. */ + copyTo(dst: Pointer, count: i32): void; + /** Returns a null pointer. */ + static null(): Pointer; + [key: number]: T; +} + +/** Zero-overhead endian conversion utilities. */ +declare namespace Endian { + /** Load a value from memory in big-endian byte order. */ + function loadBE(ptr: usize, offset?: usize): T; + /** Store a value to memory in big-endian byte order. */ + function storeBE(ptr: usize, value: T, offset?: usize): void; + /** Load a value from memory in little-endian byte order (identity on wasm). */ + function loadLE(ptr: usize, offset?: usize): T; + /** Store a value to memory in little-endian byte order (identity on wasm). */ + function storeLE(ptr: usize, value: T, offset?: usize): void; + /** Convert a value to big-endian byte order (bswap on wasm). */ + function toBE(value: T): T; + /** Convert a value from big-endian byte order (bswap on wasm). */ + function fromBE(value: T): T; + /** Convert a value to little-endian byte order (identity on wasm). */ + function toLE(value: T): T; + /** Convert a value from little-endian byte order (identity on wasm). */ + function fromLE(value: T): T; +} + +/** Zero-alloc memory view with bounds-checked endian-aware reads/writes. Big-endian by default. */ +declare class ByteSlice { + /** The raw pointer to the viewed memory. */ + readonly ptr: usize; + /** The length of the view in bytes. */ + readonly length: i32; + constructor(ptr: usize, length: i32); + getU8(offset: i32): u8; + /** @param be Big-endian byte order (default: `true`). */ + getU16(offset: i32, be?: bool /* = true */): u16; + /** @param be Big-endian byte order (default: `true`). */ + getU32(offset: i32, be?: bool /* = true */): u32; + /** @param be Big-endian byte order (default: `true`). */ + getU64(offset: i32, be?: bool /* = true */): u64; + getI8(offset: i32): i8; + /** @param be Big-endian byte order (default: `true`). */ + getI16(offset: i32, be?: bool /* = true */): i16; + /** @param be Big-endian byte order (default: `true`). */ + getI32(offset: i32, be?: bool /* = true */): i32; + /** @param be Big-endian byte order (default: `true`). */ + getI64(offset: i32, be?: bool /* = true */): i64; + setU8(offset: i32, value: u8): void; + /** @param be Big-endian byte order (default: `true`). */ + setU16(offset: i32, value: u16, be?: bool /* = true */): void; + /** @param be Big-endian byte order (default: `true`). */ + setU32(offset: i32, value: u32, be?: bool /* = true */): void; + /** @param be Big-endian byte order (default: `true`). */ + setU64(offset: i32, value: u64, be?: bool /* = true */): void; + setI8(offset: i32, value: i8): void; + /** @param be Big-endian byte order (default: `true`). */ + setI16(offset: i32, value: i16, be?: bool /* = true */): void; + /** @param be Big-endian byte order (default: `true`). */ + setI32(offset: i32, value: i32, be?: bool /* = true */): void; + /** @param be Big-endian byte order (default: `true`). */ + setI64(offset: i32, value: i64, be?: bool /* = true */): void; + slice(start: i32, end?: i32): ByteSlice; + copyTo(dst: ByteSlice, dstOff?: i32, srcOff?: i32, count?: i32): void; + fill(value: u8, start?: i32, end?: i32): void; + equals(other: ByteSlice): bool; + toPointer(): Pointer; + toString(): string; + [key: number]: u8; +} + +/** Type-safe bit manipulation utilities. Integer types only. */ +declare namespace BitFlags { + /** Check if all bits in `bit` are set in `flags`. */ + function has(flags: T, bit: T): bool; + /** Check if any bits in `mask` are set in `flags`. */ + function hasAny(flags: T, mask: T): bool; + /** Test whether bit at `index` is set. */ + function test(flags: T, index: i32): bool; + /** Set bits from `bit` in `flags`. */ + function set(flags: T, bit: T): T; + /** Clear bits from `bit` in `flags`. */ + function clear(flags: T, bit: T): T; + /** Toggle bits from `bit` in `flags`. */ + function toggle(flags: T, bit: T): T; + /** Count number of set bits. */ + function popcount(flags: T): i32; + /** Check if no bits are set. */ + function isEmpty(flags: T): bool; +} + +/** Hex and varint encoding utilities. */ +declare namespace Encoding { + namespace Hex { + /** Encode bytes to hex chars. Returns chars written. */ + function encode(src: usize, srcLen: i32, dst: usize): i32; + /** Decode hex chars to bytes. Returns bytes written, -1 on error. */ + function decode(src: usize, srcLen: i32, dst: usize): i32; + /** Encode a single byte to 2 hex chars. */ + function encodeByte(value: u8, dst: usize): void; + /** Decode 2 hex chars to a byte. Returns -1 on error. */ + function decodeByte(src: usize): i32; + } + namespace Varint { + /** Encode u32 as unsigned LEB128. Returns bytes written. */ + function encodeU32(value: u32, dst: usize): i32; + /** Encode u64 as unsigned LEB128. Returns bytes written. */ + function encodeU64(value: u64, dst: usize): i32; + /** Decode unsigned LEB128 u32. */ + function decodeU32(src: usize, bytesRead: Pointer): u32; + /** Decode unsigned LEB128 u64. */ + function decodeU64(src: usize, bytesRead: Pointer): u64; + /** Encode u64 as Bitcoin CompactSize. Returns bytes written. */ + function encodeCompact(value: u64, dst: usize): i32; + /** Decode Bitcoin CompactSize. */ + function decodeCompact(src: usize, bytesRead: Pointer): u64; + } +} + +declare class FixedMap { + constructor(initialCapacity?: i32); + readonly size: i32; + has(key: K): bool; + get(key: K): V; + set(key: K, value: V): this; + delete(key: K): bool; + clear(): void; + keys(): K[]; + values(): V[]; + toString(): string; +} + +declare class FixedArray { + [key: number]: T; + constructor(capacity: i32); + length: i32; + readonly capacity: i32; + push(value: T): i32; + pop(): T; + swapDelete(index: i32): void; + indexOf(value: T, fromIndex?: i32): i32; + includes(value: T, fromIndex?: i32): bool; + fill(value: T, start?: i32, end?: i32): this; + clear(): void; + toString(): string; +} + +declare class FixedSet { + constructor(initialCapacity?: i32); + readonly size: i32; + has(key: T): bool; + add(key: T): this; + delete(key: T): bool; + clear(): void; + values(): T[]; + toString(): string; +} + interface SymbolConstructor { readonly hasInstance: symbol; readonly isConcatSpreadable: symbol; @@ -2628,10 +2807,98 @@ declare namespace console { export function timeEnd(label?: string): void; } -/** Browser-like crypto utilities. */ +/** Opaque key handle for the Web Crypto API (per-request on the edge). */ +declare class CryptoKey { + readonly handle: u32; + readonly type: string; + readonly extractable: bool; + readonly algorithm: i32; + readonly usages: i32; + algorithmName(): string; + hasUsage(u: i32): bool; +} +declare class CryptoKeyPair { + readonly publicKey: CryptoKey; + readonly privateKey: CryptoKey; +} +/** Base class for the algorithm-parameter objects passed to SubtleCrypto. */ +declare abstract class AlgorithmParams {} +declare class AesGcmParams extends AlgorithmParams { + constructor(iv: Uint8Array, additionalData?: Uint8Array, tagLength?: i32); +} +declare class AesCbcParams extends AlgorithmParams { + constructor(iv: Uint8Array); +} +declare class AesCtrParams extends AlgorithmParams { + constructor(counter: Uint8Array, length?: i32); +} +declare class HmacImportParams extends AlgorithmParams { + constructor(hash: i32); +} +declare class HmacParams extends AlgorithmParams {} +declare class Pbkdf2Params extends AlgorithmParams { + constructor(hash: i32, salt: Uint8Array, iterations: u32); +} +declare class HkdfParams extends AlgorithmParams { + constructor(hash: i32, salt: Uint8Array, info?: Uint8Array); +} +declare class EcdsaParams extends AlgorithmParams { + constructor(hash: i32); +} +declare class EcKeyImportParams extends AlgorithmParams { + constructor(alg: i32, namedCurve: i32); +} +declare class Ed25519Params extends AlgorithmParams {} +declare class X25519ImportParams extends AlgorithmParams {} +declare class EcdhParams extends AlgorithmParams { + constructor(alg: i32, publicKeyHandle: i32); +} +/** Synchronous SubtleCrypto (no Promises). Returns values directly. The hash and + * key-format arguments are typed ABI ids (no magic strings): pass an `ALG_SHA_*` + * const to `digest`, and an `FMT_*` const (`FMT_RAW` / `FMT_PKCS8` / `FMT_SPKI`) + * to `importKey` / `exportKey`. */ +declare class SubtleCrypto { + digest(algorithm: i32, data: Uint8Array): Uint8Array; + importKey(format: i32, keyData: Uint8Array, algorithm: AlgorithmParams, extractable: bool, usages: i32): CryptoKey; + exportKey(format: i32, key: CryptoKey): Uint8Array; + encrypt(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array; + decrypt(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array; + sign(algorithm: AlgorithmParams, key: CryptoKey, data: Uint8Array): Uint8Array; + verify(algorithm: AlgorithmParams, key: CryptoKey, signature: Uint8Array, data: Uint8Array): bool; + deriveBits(algorithm: AlgorithmParams, baseKey: CryptoKey, length: i32): Uint8Array; + deriveKey(algorithm: AlgorithmParams, baseKey: CryptoKey, lengthBits: i32, derivedKeyAlgorithm: AlgorithmParams, extractable: bool, usages: i32): CryptoKey; +} + +// Algorithm / format / curve / usage ids (the Web Crypto ABI contract). +declare const ALG_SHA_1: i32, ALG_SHA_256: i32, ALG_SHA_384: i32, ALG_SHA_512: i32; +declare const ALG_SHA3_256: i32, ALG_SHA3_384: i32, ALG_SHA3_512: i32; +declare const FMT_RAW: i32, FMT_PKCS8: i32, FMT_SPKI: i32, FMT_JWK: i32; +declare const ALG_AES_GCM: i32, ALG_AES_CBC: i32, ALG_AES_CTR: i32, ALG_AES_KW: i32; +declare const ALG_HMAC: i32, ALG_ECDSA: i32, ALG_ED25519: i32, ALG_ECDH: i32, ALG_X25519: i32, ALG_HKDF: i32, ALG_PBKDF2: i32; +declare const CURVE_P256: i32, CURVE_P384: i32; +declare const USAGE_ENCRYPT: i32, USAGE_DECRYPT: i32, USAGE_SIGN: i32, USAGE_VERIFY: i32; +declare const USAGE_DERIVE_KEY: i32, USAGE_DERIVE_BITS: i32, USAGE_WRAP_KEY: i32, USAGE_UNWRAP_KEY: i32; + +/** Browser-like Web Crypto (synchronous SubtleCrypto + ergonomic helpers). */ declare namespace crypto { + /** The synchronous SubtleCrypto instance. */ + export const subtle: SubtleCrypto; /** Fills `array` with cryptographically strong random values. */ export function getRandomValues(array: Uint8Array): void; + /** An RFC 4122 version-4 UUID string. */ + export function randomUUID(): string; + export function sha1(data: Uint8Array): Uint8Array; + export function sha256(data: Uint8Array): Uint8Array; + export function sha384(data: Uint8Array): Uint8Array; + export function sha512(data: Uint8Array): Uint8Array; + export function sha1Text(s: string): Uint8Array; + export function sha256Text(s: string): Uint8Array; + export function sha384Text(s: string): Uint8Array; + export function sha512Text(s: string): Uint8Array; + export function hmacSha256(key: Uint8Array, msg: Uint8Array): Uint8Array; + export function hmacSha256Text(key: Uint8Array, msg: string): Uint8Array; + /** Lowercase hex string of `bytes`. */ + export function toHex(bytes: Uint8Array): string; } // Decorators diff --git a/std/assembly/json.ts b/std/assembly/json.ts new file mode 100644 index 0000000000..672affe563 --- /dev/null +++ b/std/assembly/json.ts @@ -0,0 +1,543 @@ +/** + * JSON for the ToilScript standard library. + * + * `JSON` is a zero-import global (this is a top-level library entry). It is both + * a dynamic value tree (`JSON.obj().set(...)`, `JSON.arr().push(...)`, returned + * from a `toJSON(): JSON` method, or produced by `JSON.parse`), and the home of + * the typed serializer `JSON.stringify`. + * + * Booleans, integers (signed i64 and unsigned u64), floats (NaN/±Infinity emit + * `null`), strings, null, arrays and objects are supported. Malformed `parse` + * input yields an error value (`isError()`), never a trap. + */ + +export class JSON { + // ---- value kinds ---- + private static readonly NULL: u8 = 0; + private static readonly BOOL: u8 = 1; + private static readonly NUM: u8 = 2; + private static readonly STR: u8 = 3; + private static readonly ARR: u8 = 4; + private static readonly OBJ: u8 = 5; + private static readonly ERR: u8 = 6; + + // number sub-kinds + private static readonly N_I64: u8 = 0; + private static readonly N_U64: u8 = 1; + private static readonly N_F64: u8 = 2; + + kind: u8 = JSON.NULL; + private b: bool = false; + private inum: i64 = 0; + private unum: u64 = 0; + private fnum: f64 = 0; + private numKind: u8 = JSON.N_I64; + private str: string = ""; + private items: Array | null = null; // ARR + private keys: Array | null = null; // OBJ + private vals: Array | null = null; // OBJ + + // ---- value factories ---- + + static nul(): JSON { + return new JSON(); + } + + /** Wrap a scalar (boolean, signed/unsigned integer, float or string). */ + static of(value: T): JSON { + const j = new JSON(); + if (isBoolean()) { + j.kind = JSON.BOOL; + j.b = value; + } else if (isInteger()) { + j.kind = JSON.NUM; + if (isSigned()) { + j.numKind = JSON.N_I64; + j.inum = value; + } else { + j.numKind = JSON.N_U64; + j.unum = value; + } + } else if (isFloat()) { + j.kind = JSON.NUM; + j.numKind = JSON.N_F64; + j.fnum = value; + } else if (isString()) { + j.kind = JSON.STR; + j.str = changetype(value); + } else { + ERROR("JSON.of: expected a boolean, number or string"); + } + return j; + } + + static arr(): JSON { + const j = new JSON(); + j.kind = JSON.ARR; + j.items = new Array(); + return j; + } + + static obj(): JSON { + const j = new JSON(); + j.kind = JSON.OBJ; + j.keys = new Array(); + j.vals = new Array(); + return j; + } + + // ---- builders (chainable) ---- + + push(value: JSON): JSON { + this.items!.push(value); + return this; + } + + set(key: string, value: JSON): JSON { + this.keys!.push(key); + this.vals!.push(value); + return this; + } + + // ---- kind predicates ---- + isNull(): bool { return this.kind == JSON.NULL; } + isBool(): bool { return this.kind == JSON.BOOL; } + isNumber(): bool { return this.kind == JSON.NUM; } + isString(): bool { return this.kind == JSON.STR; } + isArray(): bool { return this.kind == JSON.ARR; } + isObject(): bool { return this.kind == JSON.OBJ; } + isError(): bool { return this.kind == JSON.ERR; } + + /** The message of an error value, else "". */ + errorMessage(): string { + return this.kind == JSON.ERR ? this.str : ""; + } + + // ---- scalar accessors (0 / "" off-kind) ---- + asBool(): bool { + return this.kind == JSON.BOOL ? this.b : false; + } + + asF64(): f64 { + if (this.kind != JSON.NUM) return 0; + if (this.numKind == JSON.N_I64) return this.inum; + if (this.numKind == JSON.N_U64) return this.unum; + return this.fnum; + } + + asI64(): i64 { + // 64-bit integers cross JSON as decimal strings (JS numbers lose precision past + // 2^53), so a string token reads as its integer value, not 0. + if (this.kind == JSON.STR) return this.str.length ? i64.parse(this.str) : 0; + if (this.kind != JSON.NUM) return 0; + if (this.numKind == JSON.N_I64) return this.inum; + if (this.numKind == JSON.N_U64) return this.unum; + return this.fnum; + } + + asU64(): u64 { + // See asI64: decimal-string tokens are first-class for 64-bit integers. + if (this.kind == JSON.STR) return this.str.length ? u64.parse(this.str) : 0; + if (this.kind != JSON.NUM) return 0; + if (this.numKind == JSON.N_U64) return this.unum; + if (this.numKind == JSON.N_I64) return this.inum; + return this.fnum; + } + + asString(): string { + return this.kind == JSON.STR ? this.str : ""; + } + + // ---- container accessors ---- + length(): i32 { + if (this.kind == JSON.ARR) return this.items!.length; + if (this.kind == JSON.OBJ) return this.keys!.length; + return 0; + } + + /** Element of an array value, or a null value if out of range / not an array. */ + at(index: i32): JSON { + if (this.kind == JSON.ARR) { + const items = this.items!; + if (index >= 0 && index < items.length) return items[index]; + } + return JSON.nul(); + } + + has(key: string): bool { + if (this.kind == JSON.OBJ) { + const keys = this.keys!; + for (let i = 0, n = keys.length; i < n; i++) { + if (keys[i] == key) return true; + } + } + return false; + } + + /** Value of an object key, or a null value if absent / not an object. */ + get(key: string): JSON { + if (this.kind == JSON.OBJ) { + const keys = this.keys!; + for (let i = 0, n = keys.length; i < n; i++) { + if (keys[i] == key) return this.vals![i]; + } + } + return JSON.nul(); + } + + /** Keys of an object value, else an empty array. */ + objectKeys(): Array { + return this.kind == JSON.OBJ ? this.keys! : new Array(); + } + + // ---- serialize this value to JSON text ---- + toString(): string { + switch (this.kind) { + case JSON.BOOL: + return this.b ? "true" : "false"; + case JSON.NUM: + if (this.numKind == JSON.N_I64) return this.inum.toString(); + if (this.numKind == JSON.N_U64) return this.unum.toString(); + return isFinite(this.fnum) ? this.fnum.toString() : "null"; + case JSON.STR: + return JSON.quote(this.str); + case JSON.ARR: { + const items = this.items!; + const parts = new Array(items.length); + for (let i = 0, n = items.length; i < n; i++) parts[i] = items[i].toString(); + return "[" + parts.join(",") + "]"; + } + case JSON.OBJ: { + const keys = this.keys!; + const vals = this.vals!; + const parts = new Array(keys.length); + for (let i = 0, n = keys.length; i < n; i++) { + parts[i] = JSON.quote(keys[i]) + ":" + vals[i].toString(); + } + return "{" + parts.join(",") + "}"; + } + default: + // NULL and ERR both serialize to null. + return "null"; + } + } + + // ---- typed serializer: a typed value to JSON text, by compile-time type ---- + static stringify(value: T): string { + if (isBoolean()) { + return value ? "true" : "false"; + } + if (isInteger()) { + return value.toString(); + } + if (isFloat()) { + return isFinite(value) ? value.toString() : "null"; + } + if (isString()) { + if (changetype(value) == 0) return "null"; + return JSON.quote(changetype(value)); + } + if (isArray()) { + if (changetype(value) == 0) return "null"; + const arr = changetype>>(value); + const parts = new Array(arr.length); + for (let i = 0, n = arr.length; i < n; i++) parts[i] = JSON.stringify>(arr[i]); + return "[" + parts.join(",") + "]"; + } + ERROR("JSON.stringify: unsupported type, booleans, numbers, strings, null and arrays only"); + return unreachable(); + } + + // ---- parse: JSON text -> value tree ---- + static parse(text: string): JSON { + const p = new Parser(text); + const v = p.parseValue(); + if (p.err.length != 0) return JSON.errorValue(p.err); + p.skipWs(); + if (!p.atEnd()) return JSON.errorValue("unexpected trailing characters"); + return v; + } + + static errorValue(message: string): JSON { + const j = new JSON(); + j.kind = JSON.ERR; + j.str = message; + return j; + } + + // internal builders used by the parser to keep number sub-kind exact + static fromI64(value: i64): JSON { + const j = new JSON(); + j.kind = JSON.NUM; + j.numKind = JSON.N_I64; + j.inum = value; + return j; + } + + static fromU64(value: u64): JSON { + const j = new JSON(); + j.kind = JSON.NUM; + j.numKind = JSON.N_U64; + j.unum = value; + return j; + } + + static fromF64(value: f64): JSON { + const j = new JSON(); + j.kind = JSON.NUM; + j.numKind = JSON.N_F64; + j.fnum = value; + return j; + } + + static fromString(value: string): JSON { + const j = new JSON(); + j.kind = JSON.STR; + j.str = value; + return j; + } + + // ---- shared string escaping ---- + + private static quote(s: string): string { + let out = "\""; + for (let i = 0, len = s.length; i < len; i++) { + const c = s.charCodeAt(i); + if (c == 0x22) out += "\\\""; + else if (c == 0x5c) out += "\\\\"; + else if (c == 0x08) out += "\\b"; + else if (c == 0x0c) out += "\\f"; + else if (c == 0x0a) out += "\\n"; + else if (c == 0x0d) out += "\\r"; + else if (c == 0x09) out += "\\t"; + else if (c < 0x20) out += "\\u" + JSON.hex4(c); + else out += String.fromCharCode(c); + } + return out + "\""; + } + + private static hex4(c: i32): string { + const digits = "0123456789abcdef"; + let r = ""; + for (let shift = 12; shift >= 0; shift -= 4) r += digits.charAt((c >> shift) & 0xf); + return r; + } +} + +/** Recursive-descent parser producing a `JSON` value tree. Internal. */ +/** + * Maximum array/object nesting depth. Recursive descent costs stack per level, so an + * unbounded depth lets a small hostile input (e.g. `[[[[...`) overflow the stack and trap + * the instance. 512 is far beyond any real-world JSON yet far below the overflow point, so + * over-nested input fails as a normal parse error instead of crashing. + */ +const JSON_MAX_DEPTH: i32 = 512; + +class Parser { + private src: string; + private pos: i32 = 0; + private depth: i32 = 0; + err: string = ""; + + constructor(src: string) { + this.src = src; + } + + atEnd(): bool { + return this.pos >= this.src.length; + } + + // Always called after an atEnd() guard, so pos is in range. + private peek(): i32 { + return this.src.charCodeAt(this.pos); + } + + private take(): i32 { + return this.pos < this.src.length ? this.src.charCodeAt(this.pos++) : -1; + } + + skipWs(): void { + while (this.pos < this.src.length) { + const c = this.src.charCodeAt(this.pos); + if (c == 0x20 || c == 0x09 || c == 0x0a || c == 0x0d) this.pos++; + else break; + } + } + + // Callers return as soon as err is set, so fail is only reached with err empty. + private fail(message: string): JSON { + this.err = message; + return JSON.nul(); + } + + parseValue(): JSON { + this.skipWs(); + if (this.atEnd()) return this.fail("unexpected end of input"); + const c = this.peek(); + if (c == 0x7b) return this.parseObject(); // { + if (c == 0x5b) return this.parseArray(); // [ + if (c == 0x22) return JSON.fromString(this.readString()); // " + if (c == 0x74) return this.parseLiteral("true", JSON.of(true)); // t + if (c == 0x66) return this.parseLiteral("false", JSON.of(false)); // f + if (c == 0x6e) return this.parseLiteral("null", JSON.nul()); // n + if (c == 0x2d || (c >= 0x30 && c <= 0x39)) return this.parseNumber(); // - or digit + return this.fail("unexpected character"); + } + + private parseLiteral(word: string, value: JSON): JSON { + for (let i = 0, n = word.length; i < n; i++) { + if (this.take() != word.charCodeAt(i)) return this.fail("invalid literal"); + } + return value; + } + + /** Read a quoted string starting at the current `"`. Sets err on failure. */ + private readString(): string { + this.pos++; // opening " + let out = ""; + while (true) { + if (this.atEnd()) { + this.fail("unterminated string"); + return ""; + } + const c = this.take(); + if (c == 0x22) break; // closing " + if (c == 0x5c) { + if (this.atEnd()) { + this.fail("unterminated escape"); + return ""; + } + const e = this.take(); + if (e == 0x22) out += "\""; + else if (e == 0x5c) out += "\\"; + else if (e == 0x2f) out += "/"; + else if (e == 0x62) out += String.fromCharCode(0x08); + else if (e == 0x66) out += String.fromCharCode(0x0c); + else if (e == 0x6e) out += "\n"; + else if (e == 0x72) out += "\r"; + else if (e == 0x74) out += "\t"; + else if (e == 0x75) { + let code = 0; + for (let k = 0; k < 4; k++) { + const d = hexVal(this.take()); + if (d < 0) { + this.fail("invalid \\u escape"); + return ""; + } + code = (code << 4) | d; + } + out += String.fromCharCode(code); + } else { + this.fail("invalid escape"); + return ""; + } + } else { + out += String.fromCharCode(c); + } + } + return out; + } + + private parseNumber(): JSON { + const start = this.pos; + let isFloating = false; + if (this.peek() == 0x2d) this.pos++; // - + let intDigits = 0; + while (!this.atEnd() && this.peek() >= 0x30 && this.peek() <= 0x39) { + this.pos++; + intDigits++; + } + if (intDigits == 0) return this.fail("invalid number"); + if (!this.atEnd() && this.peek() == 0x2e) { + isFloating = true; + this.pos++; + let frac = 0; + while (!this.atEnd() && this.peek() >= 0x30 && this.peek() <= 0x39) { + this.pos++; + frac++; + } + if (frac == 0) return this.fail("invalid number"); + } + if (!this.atEnd() && (this.peek() == 0x65 || this.peek() == 0x45)) { + isFloating = true; + this.pos++; + if (!this.atEnd() && (this.peek() == 0x2b || this.peek() == 0x2d)) this.pos++; + let exp = 0; + while (!this.atEnd() && this.peek() >= 0x30 && this.peek() <= 0x39) { + this.pos++; + exp++; + } + if (exp == 0) return this.fail("invalid number"); + } + const slice = this.src.substring(start, this.pos); + if (isFloating) return JSON.fromF64(parseFloat(slice)); + if (slice.charCodeAt(0) == 0x2d) { + let v: i64 = 0; + for (let i = 1, n = slice.length; i < n; i++) v = v * 10 - (slice.charCodeAt(i) - 0x30); + return JSON.fromI64(v); + } + let v: u64 = 0; + for (let i = 0, n = slice.length; i < n; i++) v = v * 10 + (slice.charCodeAt(i) - 0x30); + return JSON.fromU64(v); + } + + private parseArray(): JSON { + if (++this.depth > JSON_MAX_DEPTH) return this.fail("maximum nesting depth exceeded"); + this.pos++; // [ + const j = JSON.arr(); + this.skipWs(); + if (!this.atEnd() && this.peek() == 0x5d) { + this.pos++; + this.depth--; + return j; + } + while (true) { + const v = this.parseValue(); + if (this.err.length != 0) return j; + j.push(v); + this.skipWs(); + const c = this.take(); + if (c == 0x5d) break; // ] + if (c != 0x2c) return this.fail("expected ',' or ']'"); // , + } + this.depth--; + return j; + } + + private parseObject(): JSON { + if (++this.depth > JSON_MAX_DEPTH) return this.fail("maximum nesting depth exceeded"); + this.pos++; // { + const j = JSON.obj(); + this.skipWs(); + if (!this.atEnd() && this.peek() == 0x7d) { + this.pos++; + this.depth--; + return j; + } + while (true) { + this.skipWs(); + if (this.atEnd() || this.peek() != 0x22) return this.fail("expected string key"); + const key = this.readString(); + if (this.err.length != 0) return j; + this.skipWs(); + if (this.take() != 0x3a) return this.fail("expected ':'"); // : + const v = this.parseValue(); + if (this.err.length != 0) return j; + j.set(key, v); + this.skipWs(); + const c = this.take(); + if (c == 0x7d) break; // } + if (c != 0x2c) return this.fail("expected ',' or '}'"); // , + } + this.depth--; + return j; + } +} + +/** Hex digit value, or -1. Internal. */ +function hexVal(c: i32): i32 { + if (c >= 0x30 && c <= 0x39) return c - 0x30; + if (c >= 0x61 && c <= 0x66) return c - 0x61 + 10; + if (c >= 0x41 && c <= 0x46) return c - 0x41 + 10; + return -1; +} diff --git a/std/assembly/map.ts b/std/assembly/map.ts index ab7302f717..731ca3c7fe 100644 --- a/std/assembly/map.ts +++ b/std/assembly/map.ts @@ -1,6 +1,7 @@ /// import { HASH } from "./util/hash"; +import { Runtime } from "shared/runtime"; import { E_KEYNOTFOUND } from "./util/error"; // A deterministic hash map based on CloseTable from https://github.com/jorendorff/dht @@ -113,7 +114,9 @@ export class Map { if (entry) { entry.value = value; if (isManaged()) { - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } } else { // check if rehashing is necessary @@ -130,11 +133,15 @@ export class Map { // link with the map entry.key = key; if (isManaged()) { - __link(changetype(this), changetype(key), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } } entry.value = value; if (isManaged()) { - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } ++this.entriesCount; // link with previous entry in bucket @@ -231,30 +238,32 @@ export class Map { // RT integration @unsafe private __visit(cookie: u32): void { - __visit(changetype(this.buckets), cookie); - let entries = changetype(this.entries); - if (isManaged() || isManaged()) { - let cur = entries; - let end = cur + this.entriesOffset * ENTRY_SIZE(); - while (cur < end) { - let entry = changetype>(cur); - if (!(entry.taggedNext & EMPTY)) { - if (isManaged()) { - let val = changetype(entry.key); - if (isNullable()) { - if (val) __visit(val, cookie); - } else __visit(val, cookie); - } - if (isManaged()) { - let val = changetype(entry.value); - if (isNullable()) { - if (val) __visit(val, cookie); - } else __visit(val, cookie); + if (ASC_RUNTIME != Runtime.Memory) { + __visit(changetype(this.buckets), cookie); + let entries = changetype(this.entries); + if (isManaged() || isManaged()) { + let cur = entries; + let end = cur + this.entriesOffset * ENTRY_SIZE(); + while (cur < end) { + let entry = changetype>(cur); + if (!(entry.taggedNext & EMPTY)) { + if (isManaged()) { + let val = changetype(entry.key); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } + if (isManaged()) { + let val = changetype(entry.value); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } } + cur += ENTRY_SIZE(); } - cur += ENTRY_SIZE(); } + __visit(entries, cookie); } - __visit(entries, cookie); } } diff --git a/std/assembly/pointer.ts b/std/assembly/pointer.ts new file mode 100644 index 0000000000..732a433f22 --- /dev/null +++ b/std/assembly/pointer.ts @@ -0,0 +1,80 @@ +// Zero-overhead typed pointer. @unmanaged + changetype = no allocation, no GC. +// Promoted from tests/compiler/std/pointer.ts experiment. + +@final @unmanaged +export class Pointer { + + @inline constructor(offset: usize = 0) { + return changetype>(offset); + } + + @inline get offset(): usize { + return changetype(this); + } + + @inline get value(): T { + if (isReference()) { + return changetype(changetype(this)); + } else { + return load(changetype(this)); + } + } + + @inline set value(value: T) { + if (isReference()) { + if (isManaged()) ERROR("Unsafe unmanaged set of a managed object"); + if (value == null) { + memory.fill(changetype(this), 0, offsetof()); + } else { + memory.copy(changetype(this), changetype(value), offsetof()); + } + } else { + store(changetype(this), value); + } + } + + @inline @operator("+") add(other: Pointer): Pointer { + return changetype>(changetype(this) + changetype(other)); + } + + @inline @operator("-") sub(other: Pointer): Pointer { + return changetype>(changetype(this) - changetype(other)); + } + + @inline @operator.prefix("++") inc(): Pointer { + const size = isReference() ? offsetof() : sizeof(); + return changetype>(changetype(this) + size); + } + + @inline @operator.prefix("--") dec(): Pointer { + const size = isReference() ? offsetof() : sizeof(); + return changetype>(changetype(this) - size); + } + + @inline @operator("[]") get(index: i32): T { + const size = isReference() ? offsetof() : sizeof(); + return load(changetype(this) + (index * size)); + } + + @inline @operator("[]=") set(index: i32, value: T): void { + const size = isReference() ? offsetof() : sizeof(); + store(changetype(this) + (index * size), value); + } + + @inline isNull(): bool { + return changetype(this) == 0; + } + + @inline equals(other: Pointer): bool { + return changetype(this) == changetype(other); + } + + @inline copyTo(dst: Pointer, count: i32): void { + const size = isReference() ? offsetof() : sizeof(); + memory.copy(changetype(dst), changetype(this), count * size); + } + + @inline static null(): Pointer { + return changetype>(0); + } +} diff --git a/std/assembly/rest.ts b/std/assembly/rest.ts new file mode 100644 index 0000000000..d534f6100c --- /dev/null +++ b/std/assembly/rest.ts @@ -0,0 +1,25 @@ +// Globals for the `@rest` / `@route` HTTP layer (no import). Top-level std exports are +// globalized like the other natives. + +/** + * HTTP method for `@route({ method: Methods.GET, ... })`. Values mirror the server runtime + * `Method` enum so `req.method == Methods.GET` compiles to a plain integer comparison. + */ +export enum Methods { + GET = 0, + POST = 1, + PUT = 2, + DELETE = 3, + PATCH = 4, + HEAD = 5, + OPTIONS = 6 +} + +/** + * Body/response codec for `@route({ stream: DataStream.JSON, ... })`: `JSON` uses the `@data` + * class's `toJSON`/`fromJSON`, `Binary` uses its `encode`/`decode`. + */ +export enum DataStream { + JSON = 0, + Binary = 1 +} diff --git a/std/assembly/rt.ts b/std/assembly/rt.ts index 403e4b2087..6424d2fc0e 100644 --- a/std/assembly/rt.ts +++ b/std/assembly/rt.ts @@ -1,4 +1,5 @@ import { Typeinfo, TypeinfoFlags } from "./shared/typeinfo"; +import { Runtime } from "shared/runtime"; import { E_INDEXOUTOFRANGE } from "./util/error"; import { ArrayBufferView } from "./arraybuffer"; @@ -39,7 +40,9 @@ export function __newArray(length: i32, alignLog2: usize, id: u32, data: usize = // ...since allocating the array may trigger GC steps let array = __new(offsetof(), id); store(array, changetype(buffer), offsetof("buffer")); - __link(array, changetype(buffer), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(array, changetype(buffer), false); + } store(array, changetype(buffer), offsetof("dataStart")); store(array, bufferSize, offsetof("byteLength")); store(array, length, offsetof("length_")); @@ -48,11 +51,11 @@ export function __newArray(length: i32, alignLog2: usize, id: u32, data: usize = // @ts-ignore: decorator @global @unsafe -function __tostack(ptr: usize): usize { // eslint-disable-line +export function __tostack(ptr: usize): usize { return ptr; } -// These are provided by the respective implementation, included as another entry file by asc: +// These are provided by the respective implementation, included as another entry file by toilscript: // // @ts-ignore: decorator // @builtin @unsafe diff --git a/std/assembly/rt/README.md b/std/assembly/rt/README.md index 6a27d565ab..f988eab1e0 100644 --- a/std/assembly/rt/README.md +++ b/std/assembly/rt/README.md @@ -1,4 +1,4 @@ -The AssemblyScript Runtime +The ToilScript Runtime ========================== The runtime provides the functionality necessary to dynamically allocate and deallocate memory of objects, arrays and buffers, as well as collect garbage that is no longer used. The current implementation is either a Two-Color Mark & Sweep (TCMS) garbage collector that must be called manually when the execution stack is unwound or an Incremental Tri-Color Mark & Sweep (ITCMS) garbage collector that is fully automated with a shadow stack, implemented on top of a Two-Level Segregate Fit (TLSF) memory manager. It's not designed to be the fastest of its kind, but intentionally focuses on simplicity and ease of integration until we can replace it with the real deal, i.e. Wasm GC. @@ -80,4 +80,4 @@ STUB / `--runtime stub` The stub is a maximally minimal runtime substitute, consisting of a simple and fast bump allocator with no means of freeing up memory again, except when freeing the respective most recently allocated object on top of the bump. Useful where memory is not a concern, and/or where it is sufficient to destroy the whole module including any potential garbage after execution. -See also: [Garbage collection](https://www.assemblyscript.org/garbage-collection.html) +See also: [Garbage collection](https://toil.org/garbage-collection.html) diff --git a/std/assembly/rt/index-memory.ts b/std/assembly/rt/index-memory.ts new file mode 100644 index 0000000000..5200645ec6 --- /dev/null +++ b/std/assembly/rt/index-memory.ts @@ -0,0 +1 @@ +import "./memory-runtime"; diff --git a/std/assembly/rt/memory-runtime.ts b/std/assembly/rt/memory-runtime.ts new file mode 100644 index 0000000000..82094d0d52 --- /dev/null +++ b/std/assembly/rt/memory-runtime.ts @@ -0,0 +1,94 @@ +import { AL_MASK, OBJECT, OBJECT_OVERHEAD, BLOCK_MAXSIZE, BLOCK_OVERHEAD, BLOCK, OBJECT_MAXSIZE } from "./common"; +import { E_ALLOCATION_TOO_LARGE } from "../util/error"; + +// === Runtime "none": memory only, no GC === + +// @ts-ignore: decorator +@lazy let offset: usize = ((__heap_base + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD; + +function maybeGrowMemory(newOffset: usize): void { + let pagesBefore = memory.size(); + let maxOffset = ((pagesBefore << 16) + AL_MASK) & ~AL_MASK; + if (newOffset > maxOffset) { + let pagesNeeded = (((newOffset - maxOffset + 0xffff) & ~0xffff) >>> 16); + let pagesWanted = max(pagesBefore, pagesNeeded); + if (memory.grow(pagesWanted) < 0) { + if (memory.grow(pagesNeeded) < 0) unreachable(); + } + } + offset = newOffset; +} + +// @ts-ignore: decorator +@inline function computeSize(size: usize): usize { + return ((size + BLOCK_OVERHEAD + AL_MASK) & ~AL_MASK) - BLOCK_OVERHEAD; +} + +// @ts-ignore: decorator +@unsafe @global +export function __alloc(size: usize): usize { + if (size > BLOCK_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE); + let block = changetype(offset); + let ptr = offset + BLOCK_OVERHEAD; + let payloadSize = computeSize(size); + maybeGrowMemory(ptr + payloadSize); + block.mmInfo = payloadSize; + return ptr; +} + +// @ts-ignore: decorator +@unsafe @global +export function __realloc(ptr: usize, size: usize): usize { + assert(ptr != 0 && !(ptr & AL_MASK)); + let block = changetype(ptr - BLOCK_OVERHEAD); + let actualSize = block.mmInfo; + let isLast = ptr + actualSize == offset; + let payloadSize = computeSize(size); + if (size > actualSize) { + if (isLast) { + if (size > BLOCK_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE); + maybeGrowMemory(ptr + payloadSize); + block.mmInfo = payloadSize; + } else { + let newPtr = __alloc(max(payloadSize, actualSize << 1)); + memory.copy(newPtr, ptr, actualSize); + block = changetype((ptr = newPtr) - BLOCK_OVERHEAD); + } + } else if (isLast) { + offset = ptr + payloadSize; + block.mmInfo = payloadSize; + } + return ptr; +} + +// @ts-ignore: decorator +@unsafe @global +export function __free(ptr: usize): void { + assert(ptr != 0 && !(ptr & AL_MASK)); + let block = changetype(ptr - BLOCK_OVERHEAD); + if (ptr + block.mmInfo == offset) { + offset = changetype(block); + } +} + +// @ts-ignore: decorator +@unsafe @global +export function __new(size: usize, id: u32): usize { + if (size > OBJECT_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE); + let ptr = __alloc(OBJECT_OVERHEAD + size); + let object = changetype(ptr - BLOCK_OVERHEAD); + object.gcInfo = 0; + object.gcInfo2 = 0; + object.rtId = id; + object.rtSize = size; + return ptr + OBJECT_OVERHEAD; +} + +// @ts-ignore: decorator +@unsafe @global +export function __renew(oldPtr: usize, size: usize): usize { + if (size > OBJECT_MAXSIZE) throw new Error(E_ALLOCATION_TOO_LARGE); + let newPtr = __realloc(oldPtr - OBJECT_OVERHEAD, OBJECT_OVERHEAD + size); + changetype(newPtr - BLOCK_OVERHEAD).rtSize = size; + return newPtr + OBJECT_OVERHEAD; +} diff --git a/std/assembly/set.ts b/std/assembly/set.ts index ca2d6e4eaf..cbad1ee7a9 100644 --- a/std/assembly/set.ts +++ b/std/assembly/set.ts @@ -1,6 +1,7 @@ /// import { HASH } from "./util/hash"; +import { Runtime } from "shared/runtime"; // A deterministic hash set based on CloseTable from https://github.com/jorendorff/dht @@ -113,7 +114,9 @@ export class Set { entry = changetype>(changetype(this.entries) + (this.entriesOffset++) * ENTRY_SIZE()); entry.key = key; if (isManaged()) { - __link(changetype(this), changetype(key), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(key), true); + } } ++this.entriesCount; // link with previous entry in bucket @@ -199,22 +202,24 @@ export class Set { // RT integration @unsafe private __visit(cookie: u32): void { - __visit(changetype(this.buckets), cookie); - let entries = changetype(this.entries); - if (isManaged()) { - let cur = entries; - let end = cur + this.entriesOffset * ENTRY_SIZE(); - while (cur < end) { - let entry = changetype>(cur); - if (!(entry.taggedNext & EMPTY)) { - let val = changetype(entry.key); - if (isNullable()) { - if (val) __visit(val, cookie); - } else __visit(val, cookie); + if (ASC_RUNTIME != Runtime.Memory) { + __visit(changetype(this.buckets), cookie); + let entries = changetype(this.entries); + if (isManaged()) { + let cur = entries; + let end = cur + this.entriesOffset * ENTRY_SIZE(); + while (cur < end) { + let entry = changetype>(cur); + if (!(entry.taggedNext & EMPTY)) { + let val = changetype(entry.key); + if (isNullable()) { + if (val) __visit(val, cookie); + } else __visit(val, cookie); + } + cur += ENTRY_SIZE(); } - cur += ENTRY_SIZE(); } + __visit(entries, cookie); } - __visit(entries, cookie); } } diff --git a/std/assembly/shared/feature.ts b/std/assembly/shared/feature.ts index 6fe809b326..2ece80e24d 100644 --- a/std/assembly/shared/feature.ts +++ b/std/assembly/shared/feature.ts @@ -36,8 +36,10 @@ export const enum Feature { Strings = 1 << 14, // see: https://github.com/WebAssembly/stringref /** Shared-everything threads. */ SharedEverything = 1 << 15, // see: https://github.com/WebAssembly/shared-everything-threads + /** Closures. */ + Closures = 1 << 16, /** All features. */ - All = (1 << 16) - 1 + All = (1 << 17) - 1 } /** Gets the name of the specified feature one would specify on the command line. */ @@ -59,6 +61,7 @@ export function featureToString(feature: Feature): string { case Feature.ExtendedConst: return "extended-const"; case Feature.Strings: return "stringref"; case Feature.SharedEverything: return "shared-everything"; + case Feature.Closures: return "closures"; } assert(false); return ""; diff --git a/std/assembly/shared/runtime.ts b/std/assembly/shared/runtime.ts index 4092e20961..edd3c9388d 100644 --- a/std/assembly/shared/runtime.ts +++ b/std/assembly/shared/runtime.ts @@ -8,4 +8,6 @@ export enum Runtime { Minimal = 1, /** incremental GC. */ Incremental = 2, + /** Bare minimum allocator, no GC. */ + Memory = 3, } diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index 89cad68afc..82d8d66112 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -29,7 +29,9 @@ export class StaticArray { let off = i << alignof(); let ref = load(sourcePtr + off); store(changetype(out) + off, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } } else { memory.copy(changetype(out), source.dataStart, outSize); @@ -97,14 +99,18 @@ export class StaticArray { @unsafe @operator("{}=") private __uset(index: i32, value: T): void { store(changetype(this) + (index << alignof()), value); if (isManaged()) { - __link(changetype(this), changetype(value), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), true); + } } } fill(value: T, start: i32 = 0, end: i32 = i32.MAX_VALUE): StaticArray { if (isManaged()) { FILL(changetype(this), this.length, changetype(value), start, end); - __link(changetype(this), changetype(value), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(this), changetype(value), false); + } } else { FILL(changetype(this), this.length, value, start, end); } @@ -191,14 +197,18 @@ export class StaticArray { for (let offset: usize = 0; offset < sourceSize; offset += sizeof()) { let ref = load(thisStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } outStart += sourceSize; let otherSize = otherLen << alignof(); for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { let ref = load(otherStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } } else { memory.copy(outStart, thisStart, sourceSize); @@ -214,14 +224,18 @@ export class StaticArray { for (let offset: usize = 0; offset < sourceSize; offset += sizeof()) { let ref = load(thisStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } outStart += sourceSize; let otherSize = otherLen << alignof(); for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { let ref = load(otherStart + offset); store(outStart + offset, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } } } else { memory.copy(outStart, thisStart, sourceSize); @@ -253,7 +267,9 @@ export class StaticArray { while (off < size) { let ref = load(sourceStart + off); store(outStart + off, ref); - __link(changetype(out), ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), ref, true); + } off += sizeof(); } } else { @@ -268,7 +284,9 @@ export class StaticArray { while (off < size) { let ref = load(sourceStart + off); store(outStart + off, ref); - __link(outStart, ref, true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(outStart, ref, true); + } off += sizeof(); } } else { @@ -308,7 +326,9 @@ export class StaticArray { let result = fn(load(changetype(this) + (i << alignof())), i, this); store(outStart + (i << alignof()), result); if (isManaged()) { - __link(changetype(out), changetype(result), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), changetype(result), true); + } } } return out; @@ -388,13 +408,15 @@ export class StaticArray { // RT integration @unsafe private __visit(cookie: u32): void { - if (isManaged()) { - let cur = changetype(this); - let end = cur + changetype(changetype(this) - TOTAL_OVERHEAD).rtSize; - while (cur < end) { - let val = load(cur); - if (val) __visit(val, cookie); - cur += sizeof(); + if (ASC_RUNTIME != Runtime.Memory) { + if (isManaged()) { + let cur = changetype(this); + let end = cur + changetype(changetype(this) - TOTAL_OVERHEAD).rtSize; + while (cur < end) { + let val = load(cur); + if (val) __visit(val, cookie); + cur += sizeof(); + } } } } diff --git a/std/assembly/string.ts b/std/assembly/string.ts index 7675318003..0e0390cf7a 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -1,6 +1,7 @@ /// import { OBJECT, BLOCK_MAXSIZE, TOTAL_OVERHEAD } from "./rt/common"; +import { Runtime } from "shared/runtime"; import { compareImpl, strtol, strtod, isSpace, isAscii, isFinalSigma, toLower8, toUpper8 } from "./util/string"; import { SPECIALS_UPPER, casemap, bsearch } from "./util/casemap"; import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_UNPAIRED_SURROGATE } from "./util/error"; @@ -484,7 +485,9 @@ import { Array } from "./array"; let charStr = changetype(__new(2, idof())); store(changetype(charStr), load(changetype(this) + (i << 1))); store(resultStart + (i << alignof()), changetype(charStr)); // result[i] = charStr - __link(changetype(result), changetype(charStr), true); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(result), changetype(charStr), true); + } } return result; } else if (!length) { diff --git a/std/assembly/toildb.ts b/std/assembly/toildb.ts new file mode 100644 index 0000000000..dc74b5e30e --- /dev/null +++ b/std/assembly/toildb.ts @@ -0,0 +1,496 @@ +// ToilDB: the developer-facing edge-database API. +// +// `@database class App { @collection(...) users!: Documents; ... }` +// declares logical collections; the compiler (see parser `injectDatabaseBinding`) +// synthesizes a `@global App` singleton whose fields are these typed handles, +// resolved to numeric host handles once at module init. +// +// The handles marshal `@data` keys/values to the `env.data.*` host imports +// (`bindings/toildb`). Keys and values are `@data` types (they have the injected +// `encode(): Uint8Array` + `decodeInto(buf): void` instance methods). Both +// encode and decode go through INSTANCE methods on the generic type parameter, +// which AssemblyScript resolves at specialization (it cannot call the `decode` +// static through a type parameter, but `instantiate()` + `v.decodeInto(buf)` +// works). Value types must be default-constructible. + +import { toildbHost } from "bindings/toildb"; +import { DataWriter } from "data"; + +/// Resolve a `"/"` name to its numeric host handle. Called once +/// per collection at module init by the generated `App` binding. +export function __toildbResolve(name: string): u32 { + const nb = Uint8Array.wrap(String.UTF8.encode(name)); + const out = new Uint8Array(4); + const status = toildbHost.resolveCollection(nb.dataStart, nb.byteLength, out.dataStart); + if (status < 0) abort("ToilDB collection resolve failed", "toildb", 0, 0); + return load(out.dataStart); +} + +/// The schema version of the last value-returning read's row (or -1). The +/// generated `decodeInto` of a `@migrate`-d value type calls this to dispatch an +/// old-layout row through its transform. Global so generated user-code reaches it +/// (like `__toildbResolve`). +export function __toildbReadVersion(): i64 { + return toildbHost.resultSchemaVersion(); +} + +/// Set true by a woven `decodeInto` when it migrates an old-layout row, so the +/// reading handle can converge the row (rewrite-on-read). The handle resets it +/// before each decode and reads it after; the dispatch marks it AFTER the +/// transform runs, so a transform that itself reads (resetting the flag) does not +/// clear the outer migration. +// `@lazy`: initialized on first access rather than in module-init order. A value +// type's woven `decodeInto` (which, under the cross-file `@migrate` convention, +// lives in a DIFFERENT module than this one) compiles these exported accessors on +// demand; @lazy breaks the init-order dependency so that never trips a +// use-before-declaration that a plain global would in that circular import graph. +// @ts-ignore: decorator +@lazy +var __toildbMigratedFlag: bool = false; +export function __toildbResetMigrated(): void { __toildbMigratedFlag = false; } +export function __toildbMarkMigrated(): void { __toildbMigratedFlag = true; } +export function __toildbWasMigrated(): bool { return __toildbMigratedFlag; } + +/// Pull the last stashed variable-length result of `len` bytes into a buffer. +function __toildbTake(len: i32): Uint8Array { + const buf = new Uint8Array(len); + toildbHost.takeResult(buf.dataStart, len); + return buf; +} + +/// Pull a stashed result whose length is NOT known up front (e.g. the owner +/// returned by a failed `claim`): grow the buffer until `take_result` fits. +function __toildbTakeGrow(): Uint8Array { + let cap = 256; + let buf = new Uint8Array(cap); + let n = toildbHost.takeResult(buf.dataStart, cap); + while (n == -1) { + cap = cap * 2; + buf = new Uint8Array(cap); + n = toildbHost.takeResult(buf.dataStart, cap); + } + return buf.subarray(0, n); +} + +/// A mutable keyed-entity collection (spec 7.1). `V` is the `@data` value type, +/// `K` the `@data` key type. +@global +export class Documents { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// Return the record, or `null` if it does not exist. + get(key: K): V | null { + const kb = key.encode(); + const status = toildbHost.get(this.__handle, kb.dataStart, kb.byteLength); + if (status < 0) return null; + __toildbResetMigrated(); + const v = instantiate(); + v.decodeInto(__toildbTake(status)); + // Rewrite-on-read convergence: if this row was lazily migrated from an older + // layout AND the current call may write, persist the migrated value so it + // stops being re-migrated. Best-effort: a read-only kind skips it, and a + // failed patch is ignored (the in-memory value is already correct). + if (__toildbWasMigrated() && toildbHost.writeAllowed() == 1) { + const nb = v.encode(); + toildbHost.patch(this.__handle, kb.dataStart, kb.byteLength, nb.dataStart, nb.byteLength, 0); + } + return v; + } + + /// Like `get`, but traps if the record is absent. + require(key: K): V { + const v = this.get(key); + if (v == null) unreachable(); + return v!; + } + + /// Bounded multi-get: one op, one result per key (in order), each the value + /// or `null` if absent. The key count is capped by the request budget. + getMany(keys: K[]): Array { + const w = new DataWriter(); + w.writeU32(keys.length); + for (let i = 0, n = keys.length; i < n; i++) { + w.writeBytes(keys[i].encode()); + } + const blob = w.toBytes(); + const status = toildbHost.getMany(this.__handle, blob.dataStart, blob.byteLength); + if (status < 0) unreachable(); + const out = __toildbTake(status); + const results = new Array(); + let off: i32 = 0; + const count = load(out.dataStart + off); + off += 4; + for (let i: u32 = 0; i < count; i++) { + const present = load(out.dataStart + off); + off += 1; + if (present == 0) { + results.push(null); + continue; + } + const ver = load(out.dataStart + off); + off += 4; + const len = load(out.dataStart + off); + off += 4; + const v = instantiate(); + v.decodeIntoVersioned(out.subarray(off, off + len), ver); + off += len; + results.push(v); + } + return results; + } + + /// Whether the record exists. + exists(key: K): bool { + const kb = key.encode(); + return toildbHost.exists(this.__handle, kb.dataStart, kb.byteLength) == 1; + } + + /// Create the record if absent. Returns false if it already existed. + create(key: K, value: V): bool { + const kb = key.encode(); + const vb = value.encode(); + return toildbHost.create( + this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0 + ) == 0; + } + + /// Apply a write through the key's home cell; returns the stored record. + patch(key: K, value: V): V { + const kb = key.encode(); + const vb = value.encode(); + const status = toildbHost.patch( + this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0 + ); + if (status < 0) unreachable(); + const v = instantiate(); + v.decodeInto(__toildbTake(status)); + return v; + } + + /// Atomically replace an EXISTING record's value, version-checked: returns true + /// if applied, false if a concurrent write changed the record first (optimistic + /// concurrency - re-read and retry) or the record is absent. + enqueue(key: K, value: V): bool { + const kb = key.encode(); + const vb = value.encode(); + return toildbHost.enqueue(this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0) == 0; + } + + /// Delete the record (idempotent). + delete(key: K): void { + const kb = key.encode(); + toildbHost.del(this.__handle, kb.dataStart, kb.byteLength, 0); + } + + /// Atomic fetch-and-delete (consume-once); returns the prior value or `null`. + getDelete(key: K): V | null { + const kb = key.encode(); + const status = toildbHost.getDelete(this.__handle, kb.dataStart, kb.byteLength, 0); + if (status < 0) return null; + const v = instantiate(); + v.decodeInto(__toildbTake(status)); + return v; + } +} + +/// A precomputed, read-optimized projection (spec 7.2): home pages, +/// leaderboards, rendered fragments. Read by any function kind; PUBLISHED only +/// by a `@derive`/`@job` (the host kind gate enforces it). `V` is the `@data` +/// value type, `K` the `@data` key type. +@global +export class View { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// The published view for `key`, or `null` if none has been published. + get(key: K): V | null { + const kb = key.encode(); + const status = toildbHost.viewGet(this.__handle, kb.dataStart, kb.byteLength); + if (status < 0) return null; + const v = instantiate(); + v.decodeInto(__toildbTake(status)); + return v; + } + + /// Like `get`, but traps if no view is published. + require(key: K): V { + const v = this.get(key); + if (v == null) unreachable(); + return v!; + } + + /// Publish (overwrite) the view for `key`. Derive/job only; the host assigns + /// the version so a later publish always supersedes an earlier one. + publish(key: K, value: V): void { + const kb = key.encode(); + const vb = value.encode(); + toildbHost.viewPublish( + this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0 + ); + } +} + +/// The result of a `unique.claim` (spec 8.6). `claimed` is true when the caller +/// owns the key (a fresh claim or an idempotent re-claim of its own); when +/// false, `owner` is the value that currently holds the key. +@global +export class ClaimResult { + constructor(public claimed: bool, public owner: V | null) {} +} + +/// A globally-unique claim collection (spec 7.6): username, email, slug, ... +/// `V` is the `@data` OWNER value type, `K` the `@data` claim-key type. +@global +export class Unique { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// The value that owns `key`, or `null` if unclaimed. + lookup(key: K): V | null { + const kb = key.encode(); + const status = toildbHost.uniqueLookup(this.__handle, kb.dataStart, kb.byteLength); + if (status < 0) return null; + const v = instantiate(); + v.decodeInto(__toildbTake(status)); + return v; + } + + /// Claim `key` for `value`. Returns whether the caller owns it, and (when + /// another owns it) who. + claim(key: K, value: V): ClaimResult { + const kb = key.encode(); + const vb = value.encode(); + const tag = toildbHost.uniqueClaim( + this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0 + ); + if (tag < 0) unreachable(); + if (tag == 1) { + // AlreadyClaimed: the current owner is stashed. + const owner = instantiate(); + owner.decodeInto(__toildbTakeGrow()); + return new ClaimResult(false, owner); + } + // 0 Claimed, 2 AlreadyOwnedByCaller -> the caller owns it. + return new ClaimResult(true, null); + } + + /// Release `key` (only the current owner may; a non-owner release traps). + release(key: K, value: V): void { + const kb = key.encode(); + const vb = value.encode(); + toildbHost.uniqueRelease( + this.__handle, kb.dataStart, kb.byteLength, vb.dataStart, vb.byteLength, 0 + ); + } +} + +/// An unordered set (spec 7.3): followers, tags, ACLs, room members. `M` is the +/// `@data` member type, `K` the `@data` set-key type. +@global +export class Membership { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// Whether `member` is in the set keyed by `key`. + contains(key: K, member: M): bool { + const kb = key.encode(); + const mb = member.encode(); + return toildbHost.membershipContains( + this.__handle, kb.dataStart, kb.byteLength, mb.dataStart, mb.byteLength + ) == 1; + } + + /// Add `member` to the set (idempotent). + add(key: K, member: M): void { + const kb = key.encode(); + const mb = member.encode(); + toildbHost.membershipAdd( + this.__handle, kb.dataStart, kb.byteLength, mb.dataStart, mb.byteLength, 0 + ); + } + + /// Remove `member` from the set (idempotent). + remove(key: K, member: M): void { + const kb = key.encode(); + const mb = member.encode(); + toildbHost.membershipRemove( + this.__handle, kb.dataStart, kb.byteLength, mb.dataStart, mb.byteLength, 0 + ); + } + + /// Up to `limit` members of the set. Decodes each framed member into an `M`. + list(key: K, limit: i32): M[] { + const kb = key.encode(); + const status = toildbHost.membershipList(this.__handle, kb.dataStart, kb.byteLength, limit); + if (status < 0) unreachable(); + const blob = __toildbTake(status); + const out = new Array(); + let off: i32 = 0; + const count = load(blob.dataStart + off); + off += 4; + for (let i: u32 = 0; i < count; i++) { + const ver = load(blob.dataStart + off); + off += 4; + const len = load(blob.dataStart + off); + off += 4; + const m = instantiate(); + m.decodeIntoVersioned(blob.subarray(off, off + len), ver); + out.push(m); + off += len; + } + return out; + } +} + +/// A finite, strongly-consistent resource (spec 7.7): limited stock, seats, +/// rate grants. Reserve/confirm/cancel two-phase holds prevent oversell. `K` is +/// the `@data` key type (the value is the host-owned escrow ledger). +@global +export class Capacity { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// Units available to reserve right now. + available(key: K): i64 { + const kb = key.encode(); + const status = toildbHost.capacityAvailable(this.__handle, kb.dataStart, kb.byteLength); + if (status < 0) unreachable(); + return load(__toildbTake(status).dataStart); + } + + /// Hold `amount` for `ttlMs` (it auto-releases if not confirmed in time). + /// Returns the reservation id (> 0), or 0 if there was not enough available + /// (no oversell). + reserve(key: K, amount: i64, ttlMs: i64): u64 { + const kb = key.encode(); + const status = toildbHost.capacityReserve( + this.__handle, kb.dataStart, kb.byteLength, amount, ttlMs, 0 + ); + if (status == -2) return 0; // insufficient + if (status < 0) unreachable(); + return load(__toildbTake(status).dataStart); + } + + /// Finalize a hold into a permanent consume. Returns whether the id was valid. + confirm(key: K, reservationId: u64): bool { + const kb = key.encode(); + return toildbHost.capacityConfirm( + this.__handle, kb.dataStart, kb.byteLength, reservationId as i64, 0 + ) == 1; + } + + /// Release a hold back to available (a confirmed sale cannot be cancelled). + cancel(key: K, reservationId: u64): bool { + const kb = key.encode(); + return toildbHost.capacityCancel( + this.__handle, kb.dataStart, kb.byteLength, reservationId as i64, 0 + ) == 1; + } + + /// Set the ceiling (restock / reduce). `@job`/`@derive` only; the kind gate + /// (compile + runtime) enforces it. + setTotal(key: K, total: i64): void { + const kb = key.encode(); + toildbHost.capacitySetTotal(this.__handle, kb.dataStart, kb.byteLength, total, 0); + } +} + +/// A commutative integer counter (spec 7.4): likes, view counts, inventory. +/// `K` is the `@data` key type; the value is a host-aggregated i64 rollup (there +/// is no `set`, only `add` and `get`, so concurrent deltas never lose writes). +@global +export class Counter { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// The current sum (0 if no deltas have been applied). + get(key: K): i64 { + const kb = key.encode(); + const status = toildbHost.counterGet(this.__handle, kb.dataStart, kb.byteLength); + if (status < 0) unreachable(); + const buf = __toildbTake(status); + return load(buf.dataStart); + } + + /// Apply a (possibly negative) delta; saturates at the i64 bounds. + add(key: K, delta: i64): void { + const kb = key.encode(); + toildbHost.counterAdd(this.__handle, kb.dataStart, kb.byteLength, delta, 0); + } +} + +/// An append-only event log (spec 7.5): activity feeds, audit trails, the +/// fact stream a `@derive` consumes. `V` is the `@data` event type, `K` the +/// `@data` stream-key type. +@global +export class Events { + private __handle: u32; + + constructor(handle: u32) { + this.__handle = handle; + } + + /// Append an event to the stream. + append(key: K, event: V): void { + const kb = key.encode(); + const eb = event.encode(); + toildbHost.append(this.__handle, kb.dataStart, kb.byteLength, eb.dataStart, eb.byteLength, 0); + } + + /// Append `event` exactly once per `eventId`: a retried call with the same id is + /// a no-op and returns false; the first call appends and returns true. Idempotent + /// under at-least-once delivery / client retries (dedup on the caller-chosen id). + appendOnce(key: K, eventId: string, event: V): bool { + const kb = key.encode(); + const idb = Uint8Array.wrap(String.UTF8.encode(eventId)); + const eb = event.encode(); + const status = toildbHost.appendOnce( + this.__handle, kb.dataStart, kb.byteLength, + idb.dataStart, idb.byteLength, eb.dataStart, eb.byteLength); + if (status < 0) unreachable(); + return status == 1; + } + + /// The newest `limit` events, newest first. Decodes each framed event into a + /// `V`. The host frames them as `u32 count` then per event `u32 schema_version + u32 len + bytes`. + latest(key: K, limit: i32): V[] { + const kb = key.encode(); + const status = toildbHost.latest(this.__handle, kb.dataStart, kb.byteLength, limit); + if (status < 0) unreachable(); + const blob = __toildbTake(status); + const out = new Array(); + let off: i32 = 0; + const count = load(blob.dataStart + off); + off += 4; + for (let i: u32 = 0; i < count; i++) { + const ver = load(blob.dataStart + off); + off += 4; + const len = load(blob.dataStart + off); + off += 4; + const ev = instantiate(); + ev.decodeIntoVersioned(blob.subarray(off, off + len), ver); + out.push(ev); + off += len; + } + return out; + } +} diff --git a/std/assembly/toilscript.d.ts b/std/assembly/toilscript.d.ts new file mode 100644 index 0000000000..d061d1cd11 --- /dev/null +++ b/std/assembly/toilscript.d.ts @@ -0,0 +1,585 @@ +/** + * ToilScript-native ambient declarations. + * + * Zero-import natives the ToilScript compiler provides directly: the `@main` + * entry decorator and the big-integer global types (u128 / i128 / u256 / i256, + * implemented in std/assembly/bignum). They live in this ambient `.d.ts` + * (referenced from index.d.ts) so editors and type-checking recognize them; the + * compiler handles `@main` and resolves the real bignum classes on its own. + */ + +/** + * Marks a single top-level function as the module entry point. The compiler + * exports it as the WebAssembly export `main`, no `export` keyword needed. + * Exactly one `@main` is allowed per module. + */ +declare function main(): void; + +// Typed as their decorator targets (class decorators take the constructor; the method +// decorator takes target/key/descriptor) so editors accept the bare forms. The compiler +// handles them natively and ignores these declarations. + +/** + * Marks a class as a serializable data type: the compiler generates a compact, + * self-identifying binary codec (`encode`/`decode`) plus a `toJSON`/`fromJSON` + * view, and (with `--rpcModule`) a matching typed client class. + */ +declare function data(target: Function): void; + +/** + * Marks a function (free, or a method of an `@service` class) as a client-callable + * RPC endpoint. The server build emits it onto the typed client `Server` surface. + */ +declare function remote(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; + +/** + * Marks a class as an RPC service: its `@remote` methods are namespaced under the + * client `Server` (e.g. `Server..()`). + */ +declare function service(target: Function): void; + +// --- HTTP layer (@rest / @route), handled natively by the compiler; typed here for editors --- + +/** HTTP method for `@route({ method: Methods.GET, ... })`. */ +declare enum Methods { GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS } + +/** Body/response codec for `@route({ stream: DataStream.JSON, ... })`. */ +declare enum DataStream { JSON, Binary } + +interface RestOptions { stream?: DataStream } +interface RouteOptions { method: Methods; path: string; stream?: DataStream } +/** A legacy method decorator (the return of a `@route`/`@get`/... factory). */ +type ToilRouteDecorator = (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => void; + +/** Marks a class as an HTTP controller mounted at `prefix` (default `/`). */ +declare function rest(target: Function): void; +declare function rest(prefix?: string): (target: Function) => void; +declare function rest(options: RestOptions): (target: Function) => void; + +/** Declares an HTTP route on a `@rest` method (`@route({ method, path, stream })`). */ +declare function route(options: RouteOptions): ToilRouteDecorator; +/** HTTP verb shortcuts for `@route` (`@del` for DELETE, since `delete` is a reserved word). */ +declare function get(path: string): ToilRouteDecorator; +declare function post(path: string): ToilRouteDecorator; +declare function put(path: string): ToilRouteDecorator; +declare function del(path: string): ToilRouteDecorator; +declare function patch(path: string): ToilRouteDecorator; +declare function head(path: string): ToilRouteDecorator; +declare function options(path: string): ToilRouteDecorator; + +// --- route response/security decorators, handled natively by the compiler --- + +/** Cache a route's response: `@cache(edgeMinutes, browserSeconds?, privateScope?, allowAuth?)`. */ +declare function cache(edgeMinutes: i32, browserSeconds?: i32, privateScope?: bool, allowAuth?: bool): ToilRouteDecorator; + +/** Rate-limiting strategy for `@ratelimit`. Values match the runtime `RateLimit` enum. */ +declare enum RateLimit { FixedWindow, SlidingWindow, TokenBucket } + +/** Rate-limit a route: `@ratelimit(strategy, limit, window)`. */ +declare function ratelimit(strategy: RateLimit, limit: i32, window: i32): ToilRouteDecorator; + +/** Require a valid session for a `@rest` class or route method (`@auth`). 401 otherwise. */ +declare function auth(target: Function): void; +declare function auth(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; + +/** Declare the authenticated-user type (`@user class User { ... }`); enables `AuthService.getUser()`. */ +declare function user(target: Function): void; + +// --- L4 daemon (@daemon / @scheduled) + streams (@stream + lifecycle hooks), +// handled natively by the compiler; typed here so editors accept the bare forms --- + +/** Marks the single L4 daemon class: instantiated once on the global cold box, + * its instance fields preserved for the box lifetime. At most one `@daemon` per + * project. May declare a zero-arg `onStart(): void`, run once at boot. Cold + * artifact only (a `@daemon` is a compile error in the hot/request build). */ +declare function daemon(target: Function): void; + +/** Declares a `@daemon` method as a scheduled task fired on each due tick. `spec` + * is an interval (`"30s"` / `"5m"` / `"1h"` / `"1d"`) or a 5-field cron string + * (e.g. `"15 9 * * 1-5"`, weekdays 9:15). The handler must be `(): void` (no parameters, no return). */ +declare function scheduled(spec: string): (target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor) => void; + +/** Stream placement scope for `@stream({ scope })`: `Regional` (0, L2) or + * `Continental` (1, L3). Values match the runtime stream codec. */ +declare enum StreamScope { Regional, Continental } + +/** Optional `@stream` config object. Set `message` to a `@data` class to receive + * decoded packets; omit it for the raw-bytes default (`StreamPacket`). */ +interface StreamOptions { + scope?: StreamScope; + message?: Function; + maxFrameBytes?: i32; + ingressRingBytes?: i32; +} + +/** Marks a class as a stream protocol handler (runs on L2/L3 nodes). Its + * `@connect`/`@message`/`@close`/`@disconnect`/`@channel` methods are the + * lifecycle hooks. A project that uses `@stream` may NOT declare any `@service` + * or `@remote` anywhere (compiler-enforced). Hot/stream artifact only. */ +declare function stream(target: Function): void; +declare function stream(options: StreamOptions): (target: Function) => void; + +/** Stream lifecycle-hook method decorators on a `@stream` class. `@connect` runs + * on open (returns `StreamOutbound`); `@message` handles an inbound packet; + * `@close` is a graceful close; `@disconnect` is an abrupt transport loss; + * `@channel` receives an opt-in fanned-out channel message. */ +declare function connect(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; +declare function message(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; +declare function close(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; +declare function disconnect(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; +declare function channel(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor): void; + +// Stream handler argument/return types. Ambient (like the bignum natives below): +// the compiler/runtime provides the real classes; declared here so `@stream` +// handler signatures type-check in any editor. + +/** The connection-open context passed to `@connect`. Read-only. */ +declare class StreamInbound { + get connectionId(): u64; + get streamName(): string; + get remoteIp(): string; + get path(): string; + header(name: string): string; +} + +/** The accept/reject + optional first-frame decision returned by + * `@connect` / `@message`. */ +declare class StreamOutbound { + static accept(): StreamOutbound; + static reply(body: Uint8Array): StreamOutbound; + static reject(reason: u16): StreamOutbound; + static empty(): StreamOutbound; +} + +/** The close context passed to `@close` (a graceful or host-initiated close, + * distinct from `@disconnect`). */ +declare class StreamConnectionEvent { + get connectionId(): u64; + get reason(): u16; + get durationMs(): u64; +} + +/** The default (raw-bytes) `@message` parameter: a thin view over the host + * ingress ring. The ring slot is reused after the hook returns, so copy via + * `bytes()` to retain. */ +declare class StreamPacket { + get connectionId(): u64; + get length(): i32; + bytes(): Uint8Array; + at(i: i32): u8; +} + +/** The fanned-out channel message passed to `@channel`: the channel name plus + * the raw published bytes (no decode). */ +declare class StreamChannelMessage { + get connectionId(): u64; + get channelHash(): u32; + get channelName(): string; + get length(): i32; + bytes(): Uint8Array; + at(i: i32): u8; +} + +// --- ToilDB (@database / @collection + the @query/@action/... function kinds), +// handled natively by the compiler; typed here so editors accept the bare forms --- + +/** Marks a class as a ToilDB database: each `@collection` field becomes a typed, + * lazily-resolved collection handle (`App.users.get(...)`). */ +declare function database(target: Function): void; + +/** Declares a `@database` field as a collection - a `Documents`/`View`/`Unique`/ + * `Counter`/`Events`/`Membership`/`Capacity` handle. Prefer the `static` form, + * `@collection static users: Documents` (no `!` - a definite + * assignment assertion on a static field is a TS1255 error, and the compiler + * demotes the field so none is needed), so `App.users` type-checks in any editor + * with no language-service plugin. The instance form (`@collection users!: ...`) + * still works but needs the toilscript TS plugin to type the static `App.users` + * access. */ +declare function collection(target: Object, propertyKey: string | symbol): void; + +/** ToilDB function kinds (spec 6) - the data ops a function may issue. `@query` + * is read-only; `@action` adds bounded writes/claims; `@derive` publishes + * views/rollups; `@job` is background work; `@admin` is control-plane only. The + * compiler enforces the family x kind matrix (a `@query` calling `.patch` is a + * compile error). */ +declare function query(target: Function): void; +declare function action(target: Function): void; +declare function job(target: Function): void; +declare function derive(target: Function): void; +declare function admin(target: Function): void; + +// The ToilDB collection HANDLES are ambient globals (NO import, like the bignum +// natives below) - the compiler provides them (`std/assembly/toildb`, `@global`); +// these typings let editors recognize `@collection users!: Documents` and `App.users.get(...)`. Every handle is KEY-FIRST (``, matching +// `Map`/`Record`). `K`/`V`/`M` are `@data` types (the codec the host marshals). + +/** A mutable keyed-entity collection (spec 7.1): user profiles, items, sessions. */ +declare class Documents { + get(key: K): V | null; + require(key: K): V; + exists(key: K): bool; + getMany(keys: K[]): (V | null)[]; + create(key: K, value: V): bool; + patch(key: K, value: V): V; + delete(key: K): void; + getDelete(key: K): V | null; +} + +/** A precomputed, read-optimized projection (spec 7.2): pages, leaderboards. */ +declare class View { + get(key: K): V | null; + require(key: K): V; + publish(key: K, value: V): void; +} + +/** The result of a `unique.claim` (spec 8.6). */ +declare class ClaimResult { + claimed: bool; + owner: V | null; + constructor(claimed: bool, owner: V | null); +} + +/** A globally-unique claim collection (spec 7.6): usernames, emails, slugs. */ +declare class Unique { + lookup(key: K): V | null; + claim(key: K, value: V): ClaimResult; + release(key: K, value: V): void; +} + +/** An unordered set (spec 7.3): followers, tags, ACLs, room members. */ +declare class Membership { + contains(key: K, member: M): bool; + add(key: K, member: M): void; + remove(key: K, member: M): void; + list(key: K, limit: i32): M[]; +} + +/** A finite, strongly-consistent resource via escrow (spec 7.7): stock, seats. */ +declare class Capacity { + available(key: K): i64; + reserve(key: K, amount: i64, ttlMs: i64): u64; + confirm(key: K, reservationId: u64): bool; + cancel(key: K, reservationId: u64): bool; + setTotal(key: K, total: i64): void; +} + +/** A commutative integer counter (spec 7.4): likes, view counts, inventory. */ +declare class Counter { + get(key: K): i64; + add(key: K, delta: i64): void; +} + +/** An append-only event log (spec 7.5): activity feeds, audit trails. */ +declare class Events { + append(key: K, event: V): void; + latest(key: K, limit: i32): V[]; +} + +// Big integers, native globals implemented in std/assembly/bignum. The +// arithmetic/bitwise/comparison operators +// (+ - * / % & | ^ << >> == != < > <= >=) are operator overloads resolved by +// the compiler; the equivalent static methods are listed for tooling. + +/** A 128-bit unsigned integer. */ +declare class u128 { + lo: u64; + hi: u64; + constructor(lo?: u64, hi?: u64); + + static readonly Zero: u128; + static readonly One: u128; + static readonly Min: u128; + static readonly Max: u128; + + static fromString(value: string, radix?: i32): u128; + static fromI256(value: i256): u128; + static fromU256(value: u256): u128; + static fromI128(value: i128): u128; + static fromU128(value: u128): u128; + static fromI64(value: i64): u128; + static fromU64(value: u64): u128; + static fromF64(value: f64): u128; + static fromF32(value: f32): u128; + static fromI32(value: i32): u128; + static fromU32(value: u32): u128; + static fromBool(value: bool): u128; + static fromBits(lo1: u32, lo2: u32, hi1: u32, hi2: u32): u128; + static fromBytes(array: T, bigEndian?: bool): u128; + static fromBytesLE(array: u8[]): u128; + static fromBytesBE(array: u8[]): u128; + static fromUint8ArrayLE(array: Uint8Array): u128; + static fromUint8ArrayBE(array: Uint8Array): u128; + static from(value: T): u128; + + static isEmpty(value: u128): bool; + static or(a: u128, b: u128): u128; + static xor(a: u128, b: u128): u128; + static and(a: u128, b: u128): u128; + static shl(value: u128, shift: i32): u128; + static shr(value: u128, shift: i32): u128; + static shr_u(value: u128, shift: i32): u128; + static rotl(value: u128, shift: i32): u128; + static rotr(value: u128, shift: i32): u128; + static add(a: u128, b: u128): u128; + static sub(a: u128, b: u128): u128; + static mul(a: u128, b: u128): u128; + static div(a: u128, b: u128): u128; + static rem(a: u128, b: u128): u128; + static div10(value: u128): u128; + static rem10(value: u128): u128; + static pow(base: u128, exponent: i32): u128; + static sqrt(value: u128): u128; + static sqr(value: u128): u128; + static muldiv(a: u128, b: u128, c: u128): u128; + static eq(a: u128, b: u128): bool; + static ne(a: u128, b: u128): bool; + static lt(a: u128, b: u128): bool; + static gt(a: u128, b: u128): bool; + static le(a: u128, b: u128): bool; + static ge(a: u128, b: u128): bool; + static ord(a: u128, b: u128): i32; + static popcnt(value: u128): i32; + static clz(value: u128): i32; + static ctz(value: u128): i32; + + set(value: u128): this; + setI64(value: i64): this; + setU64(value: u64): this; + setI32(value: i32): this; + setU32(value: u32): this; + isZero(): bool; + not(): u128; + neg(): u128; + pos(): u128; + sqr(): this; + preInc(): this; + preDec(): this; + postInc(): u128; + postDec(): u128; + clone(): u128; + as(): T; + toI64(): i64; + toU64(): u64; + toI32(): i32; + toU32(): u32; + toBool(): bool; + toF64(): f64; + toF32(): f32; + toI128(): i128; + toU128(): this; + toI256(): i256; + toU256(): u256; + toBytes(bigEndian?: bool): u8[]; + toStaticBytes(bigEndian?: bool): StaticArray; + toUint8Array(bigEndian?: bool): Uint8Array; + toString(radix?: i32): string; +} + +/** A 128-bit signed integer. */ +declare class i128 { + lo: u64; + hi: i64; + constructor(lo?: u64, hi?: i64); + + static readonly Zero: i128; + static readonly One: i128; + static readonly Min: i128; + static readonly Max: i128; + + static fromString(value: string, radix?: i32): i128; + static fromI256(value: i256): i128; + static fromU256(value: u256): i128; + static fromI128(value: i128): i128; + static fromU128(value: u128): i128; + static fromI64(value: i64): i128; + static fromU64(value: u64): i128; + static fromF64(value: f64): i128; + static fromF32(value: f32): i128; + static fromI32(value: i32): i128; + static fromU32(value: u32): i128; + static fromBits(lo1: i32, lo2: i32, hi1: i32, hi2: i32): i128; + static fromBytes(array: T, bigEndian?: bool): i128; + static fromBytesLE(array: u8[]): i128; + static fromBytesBE(array: u8[]): i128; + static fromUint8ArrayLE(array: Uint8Array): i128; + static fromUint8ArrayBE(array: Uint8Array): i128; + static from(value: T): i128; + + static isEmpty(value: i128): bool; + static or(a: i128, b: i128): i128; + static xor(a: i128, b: i128): i128; + static and(a: i128, b: i128): i128; + static shl(value: i128, shift: i32): i128; + static shr_u(value: i128, shift: i32): i128; + static add(a: i128, b: i128): i128; + static sub(a: i128, b: i128): i128; + static eq(a: i128, b: i128): bool; + static ne(a: i128, b: i128): bool; + static lt(a: i128, b: i128): bool; + static gt(a: i128, b: i128): bool; + static le(a: i128, b: i128): bool; + static ge(a: i128, b: i128): bool; + static ord(a: i128, b: i128): i32; + static popcnt(value: i128): i32; + static clz(value: i128): i32; + static ctz(value: i128): i32; + static abs(value: i128): i128; + + isNeg(): bool; + isPos(): bool; + isZero(): bool; + not(): i128; + neg(): i128; + pos(): i128; + toBytes(bigEndian?: bool): u8[]; + toStaticBytes(bigEndian?: bool): StaticArray; + toUint8Array(bigEndian?: bool): Uint8Array; +} + +/** A 256-bit unsigned integer. */ +declare class u256 { + lo1: u64; + lo2: u64; + hi1: u64; + hi2: u64; + constructor(lo1?: u64, lo2?: u64, hi1?: u64, hi2?: u64); + + static readonly Zero: u256; + static readonly One: u256; + static readonly Min: u256; + static readonly Max: u256; + + static fromU256(value: u256): u256; + static fromU128(value: u128): u256; + static fromU64(value: u64): u256; + static fromI64(value: i64): u256; + static fromU32(value: u32): u256; + static fromI32(value: i32): u256; + static fromBits(l0: u32, l1: u32, l2: u32, l3: u32, h0: u32, h1: u32, h2: u32, h3: u32): u256; + static fromBytes(array: T, bigEndian?: bool): u256; + static fromBytesLE(array: u8[]): u256; + static fromBytesBE(array: u8[]): u256; + static fromUint8ArrayLE(array: Uint8Array): u256; + static fromUint8ArrayBE(array: Uint8Array): u256; + static fromF64(value: f64): u256; + static fromF32(value: f32): u256; + static from(value: T): u256; + static fromString(str: string, radix?: i32): u256; + + static isEmpty(value: u256): bool; + static add(a: u256, b: u256): u256; + static sub(a: u256, b: u256): u256; + static mul(a: u256, b: u256): u256; + static or(a: u256, b: u256): u256; + static xor(a: u256, b: u256): u256; + static and(a: u256, b: u256): u256; + static shr(value: u256, shift: i32): u256; + static shr_u(value: u256, shift: i32): u256; + static eq(a: u256, b: u256): bool; + static ne(a: u256, b: u256): bool; + static lt(a: u256, b: u256): bool; + static gt(a: u256, b: u256): bool; + static le(a: u256, b: u256): bool; + static ge(a: u256, b: u256): bool; + static popcnt(value: u256): i32; + static clz(value: u256): i32; + static ctz(value: u256): i32; + + set(value: u256): this; + setI64(value: i64): this; + setU64(value: u64): this; + setI32(value: i32): this; + setU32(value: u32): this; + setU128(value: u128): this; + isZero(): bool; + not(): u256; + neg(): u256; + pos(): u256; + postInc(): u256; + postDec(): u256; + clone(): u256; + as(): T; + toI64(): i64; + toU64(): u64; + toI32(): i32; + toU32(): u32; + toBool(): bool; + toI128(): i128; + toU128(): u128; + toU256(): this; + toBytes(bigEndian?: bool): u8[]; + toStaticBytes(bigEndian?: bool): StaticArray; + toUint8Array(bigEndian?: bool): Uint8Array; + toString(radix?: i32): string; +} + +/** A 256-bit signed integer (backs the signed conversions of the family). */ +declare class i256 { + lo1: i64; + lo2: i64; + hi1: i64; + hi2: i64; + constructor(lo1?: i64, lo2?: i64, hi1?: i64, hi2?: i64); + + static readonly Zero: i256; + static readonly One: i256; + static readonly Min: i256; + static readonly Max: i256; + + static isEmpty(value: i256): bool; + + isNeg(): bool; + isZero(): bool; +} + +/** + * The dynamic JSON value tree. A `@data` class's `toJSON()` returns one of these, and + * `JSON.parse(...)` produces one. Globalized by std/assembly/json, so it needs no import. + */ +declare class JSON { + /** A JSON null. */ + static nul(): JSON; + /** An empty JSON object, build it with `.set(key, value)`. */ + static obj(): JSON; + /** An empty JSON array, build it with `.push(value)`. */ + static arr(): JSON; + /** Wrap a scalar/string/bool/array as a JSON value. */ + static of(value: T): JSON; + /** Parse JSON text into a value tree (returns an error value on malformed input). */ + static parse(text: string): JSON; + /** Serialize a scalar/string/bool/array value to a JSON string. */ + static stringify(value: T): string; + + /** Append a value to a JSON array; returns `this` for chaining. */ + push(value: JSON): JSON; + /** Set a key on a JSON object; returns `this` for chaining. */ + set(key: string, value: JSON): JSON; + + isNull(): bool; + isBool(): bool; + isNumber(): bool; + isString(): bool; + isArray(): bool; + isObject(): bool; + + asBool(): bool; + asF64(): f64; + asI64(): i64; + asU64(): u64; + asString(): string; + + /** Element count of an array (or 0). */ + length(): i32; + /** Element at `index` of an array. */ + at(index: i32): JSON; + /** Whether an object has `key`. */ + has(key: string): bool; + /** Value for `key` on an object. */ + get(key: string): JSON; + /** The keys of an object. */ + objectKeys(): Array; + + /** Serialize this value tree to a JSON string. */ + toString(): string; +} diff --git a/std/assembly/typedarray.ts b/std/assembly/typedarray.ts index 3eb3945568..e23f6e448c 100644 --- a/std/assembly/typedarray.ts +++ b/std/assembly/typedarray.ts @@ -1,6 +1,7 @@ import { COMPARATOR, SORT } from "./util/sort"; import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_NOTIMPLEMENTED } from "./util/error"; import { joinIntegerArray, joinFloatArray } from "./util/string"; +import { Runtime } from "shared/runtime"; import { REVERSE, FILL } from "./util/bytes"; import { idof } from "./builtins"; import { ArrayBufferView } from "./arraybuffer"; @@ -1603,7 +1604,9 @@ function SUBARRAY( let out = changetype(__new(offsetof(), idof())); let buf = changetype(array.buffer); store(changetype(out), buf, offsetof("buffer")); - __link(changetype(out), buf, false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), buf, false); + } store(changetype(out), array.dataStart + (begin << alignof()), offsetof("dataStart")); store(changetype(out), (end - begin) << alignof(), offsetof("byteLength")); return out; @@ -1681,7 +1684,9 @@ function MAP( ); } store(changetype(out), changetype(buf), offsetof("buffer")); - __link(changetype(out), changetype(buf), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), changetype(buf), false); + } store(changetype(out), changetype(buf), offsetof("dataStart")); store(changetype(out), byteLength, offsetof("byteLength")); return out; @@ -1711,7 +1716,9 @@ function FILTER( let byteLength = j << alignof(); let data = __renew(changetype(buf), byteLength); store(changetype(out), data, offsetof("buffer")); - __link(changetype(out), data, false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), data, false); + } store(changetype(out), byteLength, offsetof("byteLength")); store(changetype(out), data, offsetof("dataStart")); return out; @@ -1876,7 +1883,9 @@ function WRAP( } let out = changetype(__new(offsetof(), idof())); store(changetype(out), changetype(buffer), offsetof("buffer")); - __link(changetype(out), changetype(buffer), false); + if (ASC_RUNTIME != Runtime.Memory) { + __link(changetype(out), changetype(buffer), false); + } store(changetype(out), byteLength, offsetof("byteLength")); store(changetype(out), changetype(buffer) + byteOffset, offsetof("dataStart")); return out; diff --git a/std/assembly/util/error.ts b/std/assembly/util/error.ts index ba3425265b..3c02bb905b 100644 --- a/std/assembly/util/error.ts +++ b/std/assembly/util/error.ts @@ -52,3 +52,7 @@ export const E_INVALIDDATE: string = "Invalid Date"; // @ts-ignore: decorator @lazy @inline export const E_UNPAIRED_SURROGATE: string = "Unpaired surrogate"; + +// @ts-ignore: decorator +@lazy @inline +export const E_CAPACITYEXCEEDED: string = "Capacity exceeded"; diff --git a/std/portable/index.d.ts b/std/portable/index.d.ts index 98556ee41b..cdf698b58d 100644 --- a/std/portable/index.d.ts +++ b/std/portable/index.d.ts @@ -1,5 +1,5 @@ /** - * Environment definitions for compiling AssemblyScript to JavaScript using tsc. + * Environment definitions for compiling ToilScript to JavaScript using tsc. * * Note that semantic differences require additional explicit conversions for full compatibility. * For example, when casting an i32 to an u8, doing `(someI32 & 0xff)` will yield the same @@ -299,7 +299,6 @@ declare namespace f64 { /** Negative infinity value. */ export const NEGATIVE_INFINITY: f64; /** Not a number value. */ - /* eslint no-shadow-restricted-names: "off" */ export const NaN: f64; /** Difference between 1 and the smallest representable value greater than 1. */ export const EPSILON: f64; diff --git a/std/ts-plugin.cjs b/std/ts-plugin.cjs new file mode 100644 index 0000000000..a57a4a23ae --- /dev/null +++ b/std/ts-plugin.cjs @@ -0,0 +1,360 @@ +/** + * ToilScript TypeScript Language Service plugin. + * + * Stock TypeScript can't see what the toilscript compiler does to a source file: + * the native decorators on top-level functions (`@main`, `@inline`, ...), the + * members it injects into a `@data` class (`encode`/`decode`/`toJSON`/...), or the + * fact that a class used only via a toil decorator is actually used. This plugin + * runs only inside the editor's language service (VS Code, WebStorm, etc. - never + * `tsc`/compiler builds) and bridges that gap: + * + * 1. Declaration-merges TYPED members onto each `@data` class (so `value.toJSON()` + * is `JSON`, `Type.decode(bytes)` is the class, etc.) by appending ambient decls + * to the file the editor sees. Diagnostics in that appended region are hidden. + * 2. As a fallback (if 1 doesn't apply), still removes the false positives: + * TS1206 / TS1249 decorator grammar + * TS2339 a `@data`-injected member accessed on a `@data` class + * TS6133 / TS6196 a toil-decorated class/method reported as unused + * + * Every other diagnostic passes through untouched, so real errors still surface. + */ +const DECORATOR_GRAMMAR_CODES = new Set([1206, 1249]); +const PROPERTY_NOT_EXIST = 2339; +const DECLARED_NEVER_USED = new Set([6133, 6196]); + +/** Members the compiler injects into every `@data` class (instance + static). */ +const DATA_MEMBERS = new Set([ + 'encode', + 'encodeInto', + 'decode', + 'decodeFrom', + 'toJSON', + 'fromJSON', + 'dataId', +]); + +/** + * Decorators whose class carries the compiler-injected `@data` binary codec. + * `@user` is `@data` plus the auth-user registration (it also types + * `AuthService.getUser()`); both get the same codec members. + */ +const CODEC_DECORATORS = new Set(['data', 'user']); + +/** Toil-native decorators whose presence means the compiler uses the declaration. */ +const TOIL_DECORATORS = new Set([ + 'data', + 'remote', + 'service', + 'rest', + 'route', + 'get', + 'post', + 'put', + 'del', + 'patch', + 'head', + 'options', + 'database', + 'collection', + 'query', + 'action', + 'job', + 'derive', + 'admin', + 'main', + 'user', + 'auth', + 'cache', + 'ratelimit', + 'global', + 'inline', + 'external', + 'unmanaged', + 'final', + 'operator', + 'lazy', + 'unsafe', + 'builtin', +]); + +function init(modules) { + const ts = modules.typescript; + + /** Deepest node spanning `pos`. */ + function nodeAt(node, pos) { + if (pos < node.getStart() || pos >= node.getEnd()) return undefined; + let found = node; + node.forEachChild((child) => { + const inner = nodeAt(child, pos); + if (inner) found = inner; + }); + return found; + } + + /** A decorator's bare name, for `@name` and `@name(...)`. */ + function decoratorName(d) { + const e = d.expression; + return e && (e.text || (e.expression && e.expression.text)); + } + + function declHasDecorator(decl, names) { + const decorators = (ts.getDecorators ? ts.getDecorators(decl) : decl.decorators) || []; + return decorators.some((d) => { + const n = decoratorName(d); + return typeof names === 'string' ? n === names : !!n && names.has(n); + }); + } + + function declsAreDataClass(declarations) { + return ( + !!declarations && + declarations.some((d) => ts.isClassDeclaration(d) && declHasDecorator(d, CODEC_DECORATORS)) + ); + } + + function resolvesToDataClass(expr, checker) { + const type = checker.getTypeAtLocation(expr); + const typeSym = type && type.getSymbol && type.getSymbol(); + if (typeSym && declsAreDataClass(typeSym.declarations)) return true; + const sym = checker.getSymbolAtLocation(expr); + return !!sym && declsAreDataClass(sym.declarations); + } + + function canHoldDecorators(node) { + return ( + ts.isClassDeclaration(node) || + ts.isClassExpression(node) || + ts.isMethodDeclaration(node) || + ts.isFunctionDeclaration(node) || + ts.isPropertyDeclaration(node) || + ts.isGetAccessorDeclaration(node) || + ts.isSetAccessorDeclaration(node) + ); + } + + /** True when a declaration carries an `export` modifier. The appended codec + * augmentation must match the class's export-ness, else merging the class with + * the synthesized `interface`/`namespace` trips TS2395 ("must be all exported + * or all local"). */ + function hasExportModifier(node) { + const mods = + (ts.getModifiers && ts.canHaveModifiers && ts.canHaveModifiers(node) + ? ts.getModifiers(node) + : node.modifiers) || []; + return mods.some((m) => m.kind === ts.SyntaxKind.ExportKeyword); + } + + /** True when the parsed file is an ES module (has a top-level import/export), so + * a global augmentation must be wrapped in `declare global { ... }`. */ + function isModuleFile(sf) { + const modsOf = (n) => + (ts.getModifiers && ts.canHaveModifiers && ts.canHaveModifiers(n) + ? ts.getModifiers(n) + : n.modifiers) || []; + return sf.statements.some( + (s) => + ts.isImportDeclaration(s) || + ts.isImportEqualsDeclaration(s) || + ts.isExportDeclaration(s) || + ts.isExportAssignment(s) || + modsOf(s).some((m) => m.kind === ts.SyntaxKind.ExportKeyword), + ); + } + + /** + * Ambient declarations to append so the editor types each `@data`/`@user` class's + * injected codec members, plus the project-wide type of `AuthService.getUser()` + * (the single `@user` class). Returns "" when the file declares neither. Uses only + * editor-visible globals (`Uint8Array`, `JSON`, `u32`), so the appended block is + * itself error-free; any diagnostics there are filtered anyway. + */ + function dataAugmentation(text) { + if (text.indexOf('@data') < 0 && text.indexOf('@user') < 0) return ''; + let sf; + try { + sf = ts.createSourceFile('__toil_aug__.ts', text, ts.ScriptTarget.Latest, true); + } catch { + return ''; + } + const moduleScoped = isModuleFile(sf); + let out = ''; + sf.forEachChild((node) => { + if (!ts.isClassDeclaration(node) || !node.name) return; + const isUser = declHasDecorator(node, 'user'); + if (!declHasDecorator(node, 'data') && !isUser) return; + const n = node.name.text; + // Match the class's export-ness so the class/interface/namespace merge is all + // exported or all local (an exported class + local augmentation -> TS2395). + const exp = hasExportModifier(node) ? 'export ' : ''; + // Both `@data` and `@user` classes get the compiler-injected binary codec. + out += + `\n// toilscript: editor types for the compiler-injected ${isUser ? '@user' : '@data'} ${n} codec\n` + + `${exp}interface ${n} { encode(): Uint8Array; toJSON(): JSON; }\n` + + `${exp}declare namespace ${n} { function decode(buf: Uint8Array): ${n}; function fromJSON(v: JSON): ${n}; function dataId(): u32; }\n`; + // The single `@user` class is also the type of `AuthService.getUser()` + // everywhere: merge it into the global `__ToilAuthUser` interface that the + // generated env d.ts returns from `getUser()`. `declare global` when the + // file is a module (else a bare interface, already global in a script). + if (isUser) { + const merge = `interface __ToilAuthUser extends ${n} {}`; + out += + `// toilscript: editor type for AuthService.getUser() (the @user ${n})\n` + + (moduleScoped ? `declare global { ${merge} }\n` : `${merge}\n`); + } + }); + return out; + } + + /** + * Ambient declarations so the editor types each `@database` class's STATIC + * collection handles. The compiler injects a lazy static getter per + * `@collection` field (`AuthDb.users`), but the source only declares an + * instance type-carrier field, so stock TS reports `AuthDb.users` as + * TS2339. Merge a `namespace` onto the class (the standard way to add typed + * statics) with one `const` per collection, typed as the field's handle type + * (`Documents`, `Capacity`, ...). Returns "" when the file + * declares no `@database`. + */ + function databaseAugmentation(text) { + if (text.indexOf('@database') < 0) return ''; + let sf; + try { + sf = ts.createSourceFile('__toil_db_aug__.ts', text, ts.ScriptTarget.Latest, true); + } catch { + return ''; + } + let out = ''; + sf.forEachChild((node) => { + if (!ts.isClassDeclaration(node) || !node.name) return; + if (!declHasDecorator(node, 'database')) return; + const dbName = node.name.text; + // Match export-ness so the class/namespace merge is all-exported or + // all-local (a mismatch trips TS2395). + const exp = hasExportModifier(node) ? 'export ' : ''; + let consts = ''; + node.members.forEach((m) => { + if (!ts.isPropertyDeclaration(m) || !declHasDecorator(m, 'collection')) return; + if (!m.type || !m.name || !ts.isIdentifier(m.name)) return; + // A `static` @collection field is ALREADY a static member of the class, so + // synthesizing a namespace const for it duplicates the name (TS2300). Only + // the legacy instance (type-carrier) form needs the synthesized static + // handle; the static form type-checks `Db.coll` on its own (no plugin). + const mods = + ts.getModifiers && ts.canHaveModifiers && ts.canHaveModifiers(m) + ? ts.getModifiers(m) + : m.modifiers; + if (mods && mods.some((mod) => mod.kind === ts.SyntaxKind.StaticKeyword)) return; + consts += ` const ${m.name.text}: ${m.type.getText(sf)};\n`; + }); + if (consts) { + out += + `\n// toilscript: editor types for the @database ${dbName} static collection handles\n` + + `${exp}declare namespace ${dbName} {\n${consts}}\n`; + } + }); + return out; + } + + return { + create(info) { + const ls = info.languageService; + const host = info.languageServiceHost; + + // Original text length per augmented file, so diagnostics in the appended region drop. + const originalLength = new Map(); + + // Inject the typed @data members into the editor's view of each source file. + if (typeof host.getScriptSnapshot === 'function' && typeof host.getScriptVersion === 'function') { + const origSnapshot = host.getScriptSnapshot.bind(host); + const origVersion = host.getScriptVersion.bind(host); + host.getScriptSnapshot = (fileName) => { + const snap = origSnapshot(fileName); + if (!snap) return snap; + let aug = ''; + try { + const t = snap.getText(0, snap.getLength()); + aug = dataAugmentation(t) + databaseAugmentation(t); + } catch { + aug = ''; + } + if (!aug) { + originalLength.delete(fileName); + return snap; + } + const text = snap.getText(0, snap.getLength()); + originalLength.set(fileName, text.length); + return ts.ScriptSnapshot.fromString(text + aug); + }; + // A stable suffix so the service re-reads once and picks up the augmentation; it + // still changes whenever the underlying file changes. + host.getScriptVersion = (fileName) => origVersion(fileName) + ':toil-data'; + } + + // Proxy the language service, forwarding everything to the real one. + const proxy = Object.create(null); + for (const key of Object.keys(ls)) { + const value = ls[key]; + proxy[key] = typeof value === 'function' ? value.bind(ls) : value; + } + + const inAugmentedRegion = (fileName, diag) => { + const len = originalLength.get(fileName); + return len != null && diag.start != null && diag.start >= len; + }; + + // Fallback: a TS2339 for a `@data`-injected member on a `@data` class. + const isInjectedDataMember = (fileName, diag) => { + if (diag.code !== PROPERTY_NOT_EXIST || diag.start == null) return false; + const program = ls.getProgram(); + const sf = program && program.getSourceFile(fileName); + if (!sf) return false; + const node = nodeAt(sf, diag.start); + const access = + node && ts.isPropertyAccessExpression(node) + ? node + : node && ts.isPropertyAccessExpression(node.parent) + ? node.parent + : undefined; + if (!access || !DATA_MEMBERS.has(access.name.text)) return false; + return resolvesToDataClass(access.expression, program.getTypeChecker()); + }; + + // A "declared but never used" for a class/method/function with a toil decorator. + const isToilDecoratedUnused = (fileName, diag) => { + if (!DECLARED_NEVER_USED.has(diag.code) || diag.start == null) return false; + const program = ls.getProgram(); + const sf = program && program.getSourceFile(fileName); + if (!sf) return false; + const node = nodeAt(sf, diag.start); + if (!node) return false; + const decl = canHoldDecorators(node) ? node : node.parent; + return !!decl && canHoldDecorators(decl) && declHasDecorator(decl, TOIL_DECORATORS); + }; + + const strip = (fileName, diagnostics) => + diagnostics.filter( + (d) => + !DECORATOR_GRAMMAR_CODES.has(d.code) && + !inAugmentedRegion(fileName, d) && + !isInjectedDataMember(fileName, d) && + !isToilDecoratedUnused(fileName, d), + ); + + proxy.getSemanticDiagnostics = (fileName) => + strip(fileName, ls.getSemanticDiagnostics(fileName)); + proxy.getSyntacticDiagnostics = (fileName) => + strip(fileName, ls.getSyntacticDiagnostics(fileName)); + + if (typeof ls.getSuggestionDiagnostics === 'function') { + proxy.getSuggestionDiagnostics = (fileName) => + ls + .getSuggestionDiagnostics(fileName) + .filter((d) => !inAugmentedRegion(fileName, d) && !isToilDecoratedUnused(fileName, d)); + } + + return proxy; + }, + }; +} + +module.exports = init; diff --git a/tests/README.md b/tests/README.md index 0163048a04..a7791e3ab0 100644 --- a/tests/README.md +++ b/tests/README.md @@ -1,7 +1,7 @@ Tests ===== -This directory contains the test cases for AssemblyScript's parser and compiler. A test case +This directory contains the test cases for ToilScript's parser and compiler. A test case consists of: * A test file that is parsed or compiled (.ts) @@ -134,5 +134,5 @@ Other Tests in other directories are not run automatically and do not need to be updated. There are also: * [tests/allocators](./allocators) contains the memory allocator test suite -* [tests/browser](./browser.js) checks typical browser usage via asc's API +* [tests/browser](./browser.js) checks typical browser usage via toilscript's API * [tests/tokenizer](./tokenizer.js) is a visual test for the tokenizer tokenizing itself diff --git a/tests/allocators/default/debug.wat b/tests/allocators/default/debug.wat index 661a53ec73..7179f7d1f3 100644 --- a/tests/allocators/default/debug.wat +++ b/tests/allocators/default/debug.wat @@ -1,64 +1,92 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_=>_none (func (param i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $none_=>_none (func)) + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i64) (result i32))) + (type $7 (func)) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 140)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16524)) - (global $~lib/memory/__heap_base i32 (i32.const 16524)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32908)) + (global $~lib/memory/__heap_base i32 (i32.const 32908)) (memory $0 1) - (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (table $0 1 funcref) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "heap_alloc" (func $assembly/index/heap_alloc)) (export "heap_free" (func $assembly/index/heap_free)) (export "memory_fill" (func $assembly/index/memory_fill)) (export "memory" (memory $0)) - (func $~lib/rt/tlsf/Root#set:flMap (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap i32.store ) - (func $~lib/rt/common/BLOCK#set:mmInfo (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo i32.store ) - (func $~lib/rt/tlsf/Block#set:prev (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev i32.store offset=4 ) - (func $~lib/rt/tlsf/Block#set:next (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next i32.store offset=8 ) - (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - local.get $1 - i32.load - local.set $2 + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo i32.const 1 drop - local.get $2 + local.get $blockInfo i32.const 1 i32.and i32.eqz @@ -70,15 +98,15 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $blockInfo i32.const 3 i32.const -1 i32.xor i32.and - local.set $3 + local.set $size i32.const 1 drop - local.get $3 + local.get $size i32.const 12 i32.ge_u i32.eqz @@ -90,18 +118,18 @@ call $~lib/builtins/abort unreachable end - local.get $3 + local.get $size i32.const 256 i32.lt_u if i32.const 0 - local.set $4 - local.get $3 + local.set $fl + local.get $size i32.const 4 i32.shr_u - local.set $5 + local.set $sl else - local.get $3 + local.get $size local.tee $6 i32.const 1073741820 local.tee $7 @@ -109,14 +137,14 @@ local.get $7 i32.lt_u select - local.set $6 + local.set $boundedSize i32.const 31 - local.get $6 + local.get $boundedSize i32.clz i32.sub - local.set $4 - local.get $6 - local.get $4 + local.set $fl + local.get $boundedSize + local.get $fl i32.const 4 i32.sub i32.shr_u @@ -124,21 +152,21 @@ i32.const 4 i32.shl i32.xor - local.set $5 - local.get $4 + local.set $sl + local.get $fl i32.const 8 i32.const 1 i32.sub i32.sub - local.set $4 + local.set $fl end i32.const 1 drop - local.get $4 + local.get $fl i32.const 23 i32.lt_u if (result i32) - local.get $5 + local.get $sl i32.const 16 i32.lt_u else @@ -153,104 +181,110 @@ call $~lib/builtins/abort unreachable end - local.get $1 - i32.load offset=4 - local.set $8 - local.get $1 - i32.load offset=8 - local.set $9 - local.get $8 + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev if - local.get $8 - local.get $9 + local.get $prev + local.get $next call $~lib/rt/tlsf/Block#set:next end - local.get $9 + local.get $next if - local.get $9 - local.get $8 + local.get $next + local.get $prev call $~lib/rt/tlsf/Block#set:prev end - local.get $1 - local.get $0 - local.set $10 - local.get $4 - local.set $6 - local.get $5 - local.set $7 - local.get $10 - local.get $6 - i32.const 4 - i32.shl - local.get $7 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end i32.eq if - local.get $0 - local.set $11 - local.get $4 - local.set $10 - local.get $5 - local.set $6 - local.get $9 - local.set $7 - local.get $11 - local.get $10 + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 i32.const 4 i32.shl - local.get $6 + local.get $sl|16 i32.add i32.const 2 i32.shl i32.add - local.get $7 + local.get $head i32.store offset=96 - local.get $9 + local.get $next i32.eqz if - local.get $0 - local.set $6 - local.get $4 - local.set $7 - local.get $6 - local.get $7 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.set $6 - local.get $0 - local.set $7 - local.get $4 - local.set $11 - local.get $6 + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap i32.const 1 - local.get $5 + local.get $sl i32.shl i32.const -1 i32.xor i32.and - local.tee $6 - local.set $10 - local.get $7 - local.get $11 + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 i32.const 2 i32.shl i32.add - local.get $10 + local.get $slMap|23 i32.store offset=4 - local.get $6 + local.get $slMap i32.eqz if - local.get $0 - local.get $0 - i32.load + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap i32.const 1 - local.get $4 + local.get $fl i32.shl i32.const -1 i32.xor @@ -260,22 +294,37 @@ end end ) - (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) i32.const 1 drop - local.get $1 + local.get $block i32.eqz if i32.const 0 @@ -285,12 +334,12 @@ call $~lib/builtins/abort unreachable end - local.get $1 - i32.load - local.set $2 + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo i32.const 1 drop - local.get $2 + local.get $blockInfo i32.const 1 i32.and i32.eqz @@ -302,75 +351,84 @@ call $~lib/builtins/abort unreachable end - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.add - local.get $3 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.set $4 - local.get $4 - i32.load - local.set $5 - local.get $5 - i32.const 1 - i32.and - if - local.get $0 - local.get $4 - call $~lib/rt/tlsf/removeBlock - local.get $1 - local.get $2 + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 i32.const 4 i32.add - local.get $5 + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.tee $2 - call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 - local.set $3 - local.get $3 + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo i32.const 4 i32.add - local.get $3 - i32.load + local.get $rightInfo i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.set $4 - local.get $4 - i32.load - local.set $5 + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo end - local.get $2 + local.get $blockInfo i32.const 2 i32.and if - local.get $1 - local.set $3 - local.get $3 - i32.const 4 - i32.sub - i32.load - local.set $3 - local.get $3 - i32.load - local.set $6 + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo i32.const 1 drop - local.get $6 + local.get $leftInfo i32.const 1 i32.and i32.eqz @@ -382,38 +440,38 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.get $3 + local.get $root + local.get $left call $~lib/rt/tlsf/removeBlock - local.get $3 - local.set $1 - local.get $1 - local.get $6 + local.get $left + local.set $block + local.get $block + local.get $leftInfo i32.const 4 i32.add - local.get $2 + local.get $blockInfo i32.const 3 i32.const -1 i32.xor i32.and i32.add - local.tee $2 + local.tee $blockInfo call $~lib/rt/common/BLOCK#set:mmInfo end - local.get $4 - local.get $5 + local.get $right + local.get $rightInfo i32.const 2 i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $2 + local.get $blockInfo i32.const 3 i32.const -1 i32.xor i32.and - local.set $7 + local.set $size i32.const 1 drop - local.get $7 + local.get $size i32.const 12 i32.ge_u i32.eqz @@ -427,12 +485,12 @@ end i32.const 1 drop - local.get $1 + local.get $block i32.const 4 i32.add - local.get $7 + local.get $size i32.add - local.get $4 + local.get $right i32.eq i32.eqz if @@ -443,38 +501,38 @@ call $~lib/builtins/abort unreachable end - local.get $4 + local.get $right i32.const 4 i32.sub - local.get $1 + local.get $block i32.store - local.get $7 + local.get $size i32.const 256 i32.lt_u if i32.const 0 - local.set $8 - local.get $7 + local.set $fl + local.get $size i32.const 4 i32.shr_u - local.set $9 + local.set $sl else - local.get $7 - local.tee $3 + local.get $size + local.tee $13 i32.const 1073741820 - local.tee $6 - local.get $3 - local.get $6 + local.tee $14 + local.get $13 + local.get $14 i32.lt_u select - local.set $3 + local.set $boundedSize i32.const 31 - local.get $3 + local.get $boundedSize i32.clz i32.sub - local.set $8 - local.get $3 - local.get $8 + local.set $fl + local.get $boundedSize + local.get $fl i32.const 4 i32.sub i32.shr_u @@ -482,21 +540,21 @@ i32.const 4 i32.shl i32.xor - local.set $9 - local.get $8 + local.set $sl + local.get $fl i32.const 8 i32.const 1 i32.sub i32.sub - local.set $8 + local.set $fl end i32.const 1 drop - local.get $8 + local.get $fl i32.const 23 i32.lt_u if (result i32) - local.get $9 + local.get $sl i32.const 16 i32.lt_u else @@ -511,112 +569,124 @@ call $~lib/builtins/abort unreachable end - local.get $0 - local.set $10 - local.get $8 - local.set $3 - local.get $9 - local.set $6 - local.get $10 - local.get $3 - i32.const 4 - i32.shl - local.get $6 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - local.set $11 - local.get $1 + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block i32.const 0 call $~lib/rt/tlsf/Block#set:prev - local.get $1 - local.get $11 + local.get $block + local.get $head call $~lib/rt/tlsf/Block#set:next - local.get $11 + local.get $head if - local.get $11 - local.get $1 + local.get $head + local.get $block call $~lib/rt/tlsf/Block#set:prev end - local.get $0 - local.set $12 - local.get $8 - local.set $10 - local.get $9 - local.set $3 - local.get $1 - local.set $6 - local.get $12 - local.get $10 + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 i32.const 4 i32.shl - local.get $3 + local.get $sl|22 i32.add i32.const 2 i32.shl i32.add - local.get $6 + local.get $head|23 i32.store offset=96 - local.get $0 - local.get $0 - i32.load + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap i32.const 1 - local.get $8 + local.get $fl i32.shl i32.or call $~lib/rt/tlsf/Root#set:flMap - local.get $0 - local.set $13 - local.get $8 - local.set $12 - local.get $0 - local.set $3 - local.get $8 - local.set $6 - local.get $3 - local.get $6 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end i32.const 1 - local.get $9 + local.get $sl i32.shl i32.or - local.set $10 - local.get $13 - local.get $12 + local.set $slMap + local.get $root|26 + local.get $fl|27 i32.const 2 i32.shl i32.add - local.get $10 + local.get $slMap i32.store offset=4 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end i32.const 1 drop - local.get $1 - local.get $2 - i32.le_u + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u i32.eqz if i32.const 0 i32.const 32 - i32.const 377 + i32.const 382 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $start i32.const 4 i32.add i32.const 15 @@ -627,26 +697,29 @@ i32.and i32.const 4 i32.sub - local.set $1 - local.get $2 + local.set $start + local.get $end i32.const 15 i32.const -1 i32.xor i32.and - local.set $2 - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 - local.set $4 + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail i32.const 0 - local.set $5 - local.get $4 + local.set $tailInfo + local.get $tail if i32.const 1 drop - local.get $1 - local.get $4 + local.get $start + local.get $tail i32.const 4 i32.add i32.ge_u @@ -654,32 +727,31 @@ if i32.const 0 i32.const 32 - i32.const 384 + i32.const 389 i32.const 16 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $start i32.const 16 i32.sub - local.get $4 + local.get $tail i32.eq if - local.get $1 + local.get $start i32.const 16 i32.sub - local.set $1 - local.get $4 - i32.load - local.set $5 + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo else - nop end else i32.const 1 drop - local.get $1 - local.get $0 + local.get $start + local.get $root i32.const 1572 i32.add i32.ge_u @@ -687,17 +759,17 @@ if i32.const 0 i32.const 32 - i32.const 397 + i32.const 402 i32.const 5 call $~lib/builtins/abort unreachable end end - local.get $2 - local.get $1 + local.get $end + local.get $start i32.sub - local.set $6 - local.get $6 + local.set $size + local.get $size i32.const 4 i32.const 12 i32.add @@ -708,66 +780,70 @@ i32.const 0 return end - local.get $6 + local.get $size i32.const 2 i32.const 4 i32.mul i32.sub - local.set $7 - local.get $1 - local.set $8 - local.get $8 - local.get $7 + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize i32.const 1 i32.or - local.get $5 + local.get $tailInfo i32.const 2 i32.and i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $8 + local.get $left i32.const 0 call $~lib/rt/tlsf/Block#set:prev - local.get $8 + local.get $left i32.const 0 call $~lib/rt/tlsf/Block#set:next - local.get $1 + local.get $start i32.const 4 i32.add - local.get $7 + local.get $leftSize i32.add - local.set $4 - local.get $4 + local.set $tail + local.get $tail i32.const 0 i32.const 2 i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.set $9 - local.get $4 - local.set $3 - local.get $9 - local.get $3 + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 i32.store offset=1568 - local.get $0 - local.get $8 + local.get $root + local.get $left call $~lib/rt/tlsf/insertBlock i32.const 1 + return ) (func $~lib/rt/tlsf/initialize - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) i32.const 0 drop global.get $~lib/memory/__heap_base @@ -777,10 +853,10 @@ i32.const -1 i32.xor i32.and - local.set $0 + local.set $rootOffset memory.size - local.set $1 - local.get $0 + local.set $pagesBefore + local.get $rootOffset i32.const 1572 i32.add i32.const 65535 @@ -791,13 +867,13 @@ i32.and i32.const 16 i32.shr_u - local.set $2 - local.get $2 - local.get $1 + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore i32.gt_s if (result i32) - local.get $2 - local.get $1 + local.get $pagesNeeded + local.get $pagesBefore i32.sub memory.grow i32.const 0 @@ -808,106 +884,103 @@ if unreachable end - local.get $0 - local.set $3 - local.get $3 + local.get $rootOffset + local.set $root + local.get $root i32.const 0 call $~lib/rt/tlsf/Root#set:flMap - local.get $3 - local.set $5 + local.get $root + local.set $root|4 i32.const 0 - local.set $4 - local.get $5 - local.get $4 + local.set $tail + local.get $root|4 + local.get $tail i32.store offset=1568 i32.const 0 - local.set $5 + local.set $fl loop $for-loop|0 - local.get $5 + local.get $fl i32.const 23 i32.lt_u - local.set $4 - local.get $4 if - local.get $3 - local.set $8 - local.get $5 - local.set $7 + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 i32.const 0 - local.set $6 - local.get $8 - local.get $7 + local.set $slMap + local.get $root|7 + local.get $fl|8 i32.const 2 i32.shl i32.add - local.get $6 + local.get $slMap i32.store offset=4 i32.const 0 - local.set $8 + local.set $sl loop $for-loop|1 - local.get $8 + local.get $sl i32.const 16 i32.lt_u - local.set $7 - local.get $7 if - local.get $3 - local.set $11 - local.get $5 - local.set $10 - local.get $8 - local.set $9 + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 i32.const 0 - local.set $6 - local.get $11 - local.get $10 + local.set $head + local.get $root|11 + local.get $fl|12 i32.const 4 i32.shl - local.get $9 + local.get $sl|13 i32.add i32.const 2 i32.shl i32.add - local.get $6 + local.get $head i32.store offset=96 - local.get $8 + local.get $sl i32.const 1 i32.add - local.set $8 + local.set $sl br $for-loop|1 end end - local.get $5 + local.get $fl i32.const 1 i32.add - local.set $5 + local.set $fl br $for-loop|0 end end - local.get $0 + local.get $rootOffset i32.const 1572 i32.add - local.set $12 + local.set $memStart i32.const 0 drop - local.get $3 - local.get $12 + local.get $root + local.get $memStart memory.size - i32.const 16 - i32.shl + i64.extend_i32_s + i64.const 16 + i64.shl call $~lib/rt/tlsf/addMemory drop - local.get $3 + local.get $root global.set $~lib/rt/tlsf/ROOT ) - (func $~lib/rt/tlsf/computeSize (param $0 i32) (result i32) - local.get $0 + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size i32.const 12 i32.le_u if (result i32) i32.const 12 else - local.get $0 + local.get $size i32.const 4 i32.add i32.const 15 @@ -919,67 +992,86 @@ i32.const 4 i32.sub end + return ) - (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32) - local.get $0 + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size i32.const 1073741820 i32.gt_u if i32.const 96 i32.const 32 - i32.const 458 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable end - local.get $0 + local.get $size call $~lib/rt/tlsf/computeSize + return ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - local.get $1 + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size i32.const 256 i32.lt_u if i32.const 0 - local.set $2 - local.get $1 + local.set $fl + local.get $size i32.const 4 i32.shr_u - local.set $3 + local.set $sl else - local.get $1 - i32.const 536870910 - i32.lt_u - if (result i32) - local.get $1 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - i32.add - i32.const 1 - i32.sub - else - local.get $1 - end - local.set $4 - i32.const 31 - local.get $4 + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize i32.clz i32.sub - local.set $2 - local.get $4 - local.get $2 + local.set $fl + local.get $requestSize + local.get $fl i32.const 4 i32.sub i32.shr_u @@ -987,21 +1079,21 @@ i32.const 4 i32.shl i32.xor - local.set $3 - local.get $2 + local.set $sl + local.get $fl i32.const 8 i32.const 1 i32.sub i32.sub - local.set $2 + local.set $fl end i32.const 1 drop - local.get $2 + local.get $fl i32.const 23 i32.lt_u if (result i32) - local.get $3 + local.get $sl i32.const 16 i32.lt_u else @@ -1011,160 +1103,169 @@ if i32.const 0 i32.const 32 - i32.const 330 + i32.const 334 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $5 - local.get $2 - local.set $4 - local.get $5 - local.get $4 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end i32.const 0 i32.const -1 i32.xor - local.get $3 + local.get $sl i32.shl i32.and - local.set $6 + local.set $slMap i32.const 0 - local.set $7 - local.get $6 + local.set $head + local.get $slMap i32.eqz if - local.get $0 - i32.load + local.get $root + call $~lib/rt/tlsf/Root#get:flMap i32.const 0 i32.const -1 i32.xor - local.get $2 + local.get $fl i32.const 1 i32.add i32.shl i32.and - local.set $5 - local.get $5 + local.set $flMap + local.get $flMap i32.eqz if i32.const 0 - local.set $7 + local.set $head else - local.get $5 + local.get $flMap i32.ctz - local.set $2 - local.get $0 - local.set $8 - local.get $2 - local.set $4 - local.get $8 - local.get $4 - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.set $6 + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap i32.const 1 drop - local.get $6 + local.get $slMap i32.eqz if i32.const 0 i32.const 32 - i32.const 343 + i32.const 347 i32.const 18 call $~lib/builtins/abort unreachable end - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap i32.ctz - local.set $4 - local.get $9 - local.get $8 + local.set $sl|17 + local.get $root|15 + local.get $fl|16 i32.const 4 i32.shl - local.get $4 + local.get $sl|17 i32.add i32.const 2 i32.shl i32.add i32.load offset=96 - local.set $7 + br $~lib/rt/tlsf/GETHEAD|inlined.3 end - else - local.get $0 - local.set $9 - local.get $2 - local.set $8 - local.get $6 - i32.ctz - local.set $4 - local.get $9 - local.get $8 - i32.const 4 - i32.shl - local.get $4 - i32.add - i32.const 2 - i32.shl - i32.add - i32.load offset=96 - local.set $7 + local.set $head end - local.get $7 + local.get $head + return ) - (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) (local $5 i32) (local $6 i32) - (local $7 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) i32.const 0 drop - local.get $1 - i32.const 536870910 - i32.lt_u + local.get $size + i32.const 256 + i32.ge_u if - local.get $1 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - i32.add - local.set $1 + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size end memory.size - local.set $2 - local.get $1 + local.set $pagesBefore + local.get $size i32.const 4 - local.get $2 + local.get $pagesBefore i32.const 16 i32.shl i32.const 4 i32.sub - local.get $0 - local.set $3 - local.get $3 - i32.load offset=1568 + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end i32.ne i32.shl i32.add - local.set $1 - local.get $1 + local.set $size + local.get $size i32.const 65535 i32.add i32.const 65535 @@ -1173,22 +1274,22 @@ i32.and i32.const 16 i32.shr_u - local.set $4 - local.get $2 - local.tee $3 - local.get $4 + local.set $pagesNeeded + local.get $pagesBefore local.tee $5 - local.get $3 + local.get $pagesNeeded + local.tee $6 local.get $5 + local.get $6 i32.gt_s select - local.set $6 - local.get $6 + local.set $pagesWanted + local.get $pagesWanted memory.grow i32.const 0 i32.lt_s if - local.get $4 + local.get $pagesNeeded memory.grow i32.const 0 i32.lt_s @@ -1197,27 +1298,30 @@ end end memory.size - local.set $7 - local.get $0 - local.get $2 - i32.const 16 - i32.shl - local.get $7 + local.set $pagesAfter + local.get $root + local.get $pagesBefore i32.const 16 i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl call $~lib/rt/tlsf/addMemory drop ) - (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.load - local.set $3 + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo i32.const 1 drop - local.get $2 + local.get $size i32.const 4 i32.add i32.const 15 @@ -1227,81 +1331,87 @@ if i32.const 0 i32.const 32 - i32.const 357 + i32.const 361 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $blockInfo i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $size i32.sub - local.set $4 - local.get $4 + local.set $remaining + local.get $remaining i32.const 4 i32.const 12 i32.add i32.ge_u if - local.get $1 - local.get $2 - local.get $3 + local.get $block + local.get $size + local.get $blockInfo i32.const 2 i32.and i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 + local.get $block i32.const 4 i32.add - local.get $2 + local.get $size i32.add - local.set $5 - local.get $5 - local.get $4 + local.set $spare + local.get $spare + local.get $remaining i32.const 4 i32.sub i32.const 1 i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.get $5 + local.get $root + local.get $spare call $~lib/rt/tlsf/insertBlock else - local.get $1 - local.get $3 + local.get $block + local.get $blockInfo i32.const 1 i32.const -1 i32.xor i32.and call $~lib/rt/common/BLOCK#set:mmInfo - local.get $1 - local.set $5 - local.get $5 - i32.const 4 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - local.get $1 - local.set $5 - local.get $5 - i32.const 4 - i32.add - local.get $5 - i32.load - i32.const 3 - i32.const -1 - i32.xor - i32.and - i32.add - i32.load + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo i32.const 2 i32.const -1 i32.xor @@ -1309,34 +1419,34 @@ call $~lib/rt/common/BLOCK#set:mmInfo end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - local.get $1 + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size call $~lib/rt/tlsf/prepareSize - local.set $2 - local.get $0 - local.get $2 + local.set $payloadSize + local.get $root + local.get $payloadSize call $~lib/rt/tlsf/searchBlock - local.set $3 - local.get $3 + local.set $block + local.get $block i32.eqz if - local.get $0 - local.get $2 + local.get $root + local.get $payloadSize call $~lib/rt/tlsf/growMemory - local.get $0 - local.get $2 + local.get $root + local.get $payloadSize call $~lib/rt/tlsf/searchBlock - local.set $3 + local.set $block i32.const 1 drop - local.get $3 + local.get $block i32.eqz if i32.const 0 i32.const 32 - i32.const 496 + i32.const 499 i32.const 16 call $~lib/builtins/abort unreachable @@ -1344,65 +1454,69 @@ end i32.const 1 drop - local.get $3 - i32.load + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo i32.const 3 i32.const -1 i32.xor i32.and - local.get $2 + local.get $payloadSize i32.ge_u i32.eqz if i32.const 0 i32.const 32 - i32.const 498 + i32.const 501 i32.const 14 call $~lib/builtins/abort unreachable end - local.get $0 - local.get $3 + local.get $root + local.get $block call $~lib/rt/tlsf/removeBlock - local.get $0 - local.get $3 - local.get $2 + local.get $root + local.get $block + local.get $payloadSize call $~lib/rt/tlsf/prepareBlock i32.const 0 drop - local.get $3 + local.get $block + return ) - (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) global.get $~lib/rt/tlsf/ROOT i32.eqz if call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT - local.get $0 + local.get $size call $~lib/rt/tlsf/allocateBlock i32.const 4 i32.add + return ) - (func $~lib/memory/heap.alloc (param $0 i32) (result i32) - local.get $0 + (func $~lib/memory/heap.alloc (param $size i32) (result i32) + local.get $size call $~lib/rt/tlsf/__alloc + return ) - (func $assembly/index/heap_alloc (param $0 i32) (result i32) - local.get $0 + (func $assembly/index/heap_alloc (param $size i32) (result i32) + local.get $size call $~lib/memory/heap.alloc + return ) - (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32) - (local $1 i32) - local.get $0 + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr i32.const 4 i32.sub - local.set $1 - local.get $0 + local.set $block + local.get $ptr i32.const 0 i32.ne if (result i32) - local.get $0 + local.get $ptr i32.const 15 i32.and i32.eqz @@ -1410,8 +1524,8 @@ i32.const 0 end if (result i32) - local.get $1 - i32.load + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo i32.const 1 i32.and i32.eqz @@ -1422,28 +1536,29 @@ if i32.const 0 i32.const 32 - i32.const 559 + i32.const 562 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $1 + local.get $block + return ) - (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) i32.const 0 drop - local.get $1 - local.get $1 - i32.load + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo i32.const 1 i32.or call $~lib/rt/common/BLOCK#set:mmInfo - local.get $0 - local.get $1 + local.get $root + local.get $block call $~lib/rt/tlsf/insertBlock ) - (func $~lib/rt/tlsf/__free (param $0 i32) - local.get $0 + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr global.get $~lib/memory/__heap_base i32.lt_u if @@ -1455,22 +1570,22 @@ call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT - local.get $0 + local.get $ptr call $~lib/rt/tlsf/checkUsedBlock call $~lib/rt/tlsf/freeBlock ) - (func $~lib/memory/heap.free (param $0 i32) - local.get $0 + (func $~lib/memory/heap.free (param $ptr i32) + local.get $ptr call $~lib/rt/tlsf/__free ) - (func $assembly/index/heap_free (param $0 i32) - local.get $0 + (func $assembly/index/heap_free (param $ptr i32) + local.get $ptr call $~lib/memory/heap.free ) - (func $assembly/index/memory_fill (param $0 i32) (param $1 i32) (param $2 i32) - local.get $0 - local.get $1 - local.get $2 + (func $assembly/index/memory_fill (param $ptr i32) (param $value i32) (param $count i32) + local.get $ptr + local.get $value + local.get $count memory.fill ) ) diff --git a/tests/allocators/default/package.json b/tests/allocators/default/package.json index b422a3e645..ab749a1694 100644 --- a/tests/allocators/default/package.json +++ b/tests/allocators/default/package.json @@ -3,7 +3,7 @@ "type": "module", "scripts": { "build": "npm run build:debug && npm run build:release", - "build:debug": "node ../../../bin/asc assembly/index.ts -t debug.wat -o debug.wasm --sourceMap --stats --debug", - "build:release": "node ../../../bin/asc assembly/index.ts -t release.wat -o release.wasm --sourceMap --stats --noAssert --optimize" + "build:debug": "node ../../../bin/toilscript assembly/index.ts -t debug.wat -o debug.wasm --sourceMap --stats --debug", + "build:release": "node ../../../bin/toilscript assembly/index.ts -t release.wat -o release.wasm --sourceMap --stats --noAssert --optimize" } } diff --git a/tests/allocators/default/release.wat b/tests/allocators/default/release.wat index 65abb72055..f299b35489 100644 --- a/tests/allocators/default/release.wat +++ b/tests/allocators/default/release.wat @@ -1,18 +1,19 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $none_=>_none (func)) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_=>_none (func (param i32))) + (type $0 (func (param i32 i32))) + (type $1 (func (param i32 i32 i64))) + (type $2 (func)) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32))) + (type $7 (func (param i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 1036) "<") - (data (i32.const 1048) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1100) "<") - (data (i32.const 1112) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (export "heap_alloc" (func $assembly/index/heap_alloc)) (export "heap_free" (func $assembly/index/heap_free)) (export "memory_fill" (func $assembly/index/memory_fill)) @@ -35,11 +36,11 @@ i32.shr_u else i32.const 31 - local.get $3 i32.const 1073741820 local.get $3 + local.get $3 i32.const 1073741820 - i32.lt_u + i32.ge_u select local.tee $3 i32.clz @@ -59,52 +60,45 @@ local.set $3 local.get $1 i32.load offset=8 - local.set $4 + local.set $5 local.get $1 i32.load offset=4 - local.tee $5 + local.tee $4 if - local.get $5 local.get $4 + local.get $5 i32.store offset=8 end - local.get $4 + local.get $5 if - local.get $4 local.get $5 + local.get $4 i32.store offset=4 end - local.get $3 + local.get $1 + local.get $0 local.get $2 i32.const 4 i32.shl + local.get $3 i32.add i32.const 2 i32.shl - local.get $0 i32.add + local.tee $1 i32.load offset=96 - local.get $1 i32.eq if - local.get $3 - local.get $2 - i32.const 4 - i32.shl - i32.add - i32.const 2 - i32.shl - local.get $0 - i32.add - local.get $4 + local.get $1 + local.get $5 i32.store offset=96 - local.get $4 + local.get $5 i32.eqz if + local.get $0 local.get $2 i32.const 2 i32.shl - local.get $0 i32.add local.tee $1 i32.load offset=4 @@ -140,6 +134,7 @@ local.get $1 i32.const 4 i32.add + local.tee $6 local.get $1 i32.load local.tee $3 @@ -165,9 +160,7 @@ i32.add local.tee $3 i32.store - local.get $1 - i32.const 4 - i32.add + local.get $6 local.get $1 i32.load i32.const -4 @@ -212,6 +205,7 @@ i32.sub local.get $1 i32.store + local.get $0 local.get $3 i32.const -4 i32.and @@ -224,11 +218,11 @@ i32.shr_u else i32.const 31 - local.get $2 i32.const 1073741820 local.get $2 + local.get $2 i32.const 1073741820 - i32.lt_u + i32.ge_u select local.tee $2 i32.clz @@ -252,7 +246,6 @@ i32.add i32.const 2 i32.shl - local.get $0 i32.add i32.load offset=96 local.set $3 @@ -268,14 +261,14 @@ local.get $1 i32.store offset=4 end - local.get $2 + local.get $0 local.get $5 i32.const 4 i32.shl + local.get $2 i32.add i32.const 2 i32.shl - local.get $0 i32.add local.get $1 i32.store offset=96 @@ -287,10 +280,10 @@ i32.shl i32.or i32.store + local.get $0 local.get $5 i32.const 2 i32.shl - local.get $0 i32.add local.tee $0 local.get $0 @@ -301,16 +294,10 @@ i32.or i32.store offset=4 ) - (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) (local $3 i32) - local.get $2 - i32.const -16 - i32.and - local.get $0 - i32.load offset=1568 - local.tee $2 - i32.const 0 - local.get $2 + (local $4 i32) + (local $5 i32) local.get $1 i32.const 19 i32.add @@ -318,36 +305,45 @@ i32.and i32.const 4 i32.sub - local.tee $1 - i32.const 16 - i32.sub - i32.eq - select + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 if - local.get $2 - i32.load - local.set $3 + local.get $3 local.get $1 i32.const 16 i32.sub - local.set $1 + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and local.get $1 i32.sub - local.tee $2 + local.tee $3 i32.const 20 i32.lt_u if return end local.get $1 - local.get $3 + local.get $4 i32.const 2 i32.and - local.get $2 + local.get $3 i32.const 8 i32.sub - local.tee $2 + local.tee $3 i32.const 1 i32.or i32.or @@ -358,16 +354,16 @@ local.get $1 i32.const 0 i32.store offset=8 - local.get $2 local.get $1 i32.const 4 i32.add + local.get $3 i32.add - local.tee $2 + local.tee $3 i32.const 2 i32.store local.get $0 - local.get $2 + local.get $3 i32.store offset=1568 local.get $0 local.get $1 @@ -393,10 +389,10 @@ if unreachable end - i32.const 17552 + i32.const 33936 i32.const 0 i32.store - i32.const 19120 + i32.const 35504 i32.const 0 i32.store loop $for-loop|0 @@ -407,7 +403,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 17552 + i32.const 33936 i32.add i32.const 0 i32.store offset=4 @@ -418,14 +414,14 @@ i32.const 16 i32.lt_u if - local.get $1 local.get $0 i32.const 4 i32.shl + local.get $1 i32.add i32.const 2 i32.shl - i32.const 17552 + i32.const 33936 i32.add i32.const 0 i32.store offset=96 @@ -443,62 +439,64 @@ br $for-loop|0 end end - i32.const 17552 - i32.const 19124 + i32.const 33936 + i32.const 35508 memory.size - i32.const 16 - i32.shl + i64.extend_i32_s + i64.const 16 + i64.shl call $~lib/rt/tlsf/addMemory - i32.const 17552 + i32.const 33936 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - (local $3 i32) local.get $1 i32.const 256 i32.lt_u - if (result i32) + if local.get $1 i32.const 4 i32.shr_u + local.set $1 else - i32.const 31 - i32.const 1 - i32.const 27 - local.get $1 - i32.clz - i32.sub - i32.shl - local.get $1 - i32.add - i32.const 1 - i32.sub - local.get $1 local.get $1 i32.const 536870910 i32.lt_u - select - local.tee $1 + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 i32.clz i32.sub - local.tee $3 - i32.const 7 - i32.sub - local.set $2 - local.get $1 - local.get $3 + local.tee $2 i32.const 4 i32.sub i32.shr_u i32.const 16 i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 end - local.set $1 + local.get $0 local.get $2 i32.const 2 i32.shl - local.get $0 i32.add i32.load offset=4 i32.const -1 @@ -507,6 +505,7 @@ i32.and local.tee $1 if (result i32) + local.get $0 local.get $1 i32.ctz local.get $2 @@ -515,7 +514,6 @@ i32.add i32.const 2 i32.shl - local.get $0 i32.add i32.load offset=96 else @@ -563,31 +561,33 @@ call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT - local.set $2 + local.set $1 local.get $0 i32.const 1073741820 i32.gt_u if i32.const 1056 i32.const 1120 - i32.const 458 + i32.const 461 i32.const 29 call $~lib/builtins/abort unreachable end - local.get $2 - i32.const 12 - local.get $0 - i32.const 19 - i32.add - i32.const -16 - i32.and - i32.const 4 - i32.sub + local.get $1 local.get $0 i32.const 12 i32.le_u - select + if (result i32) + i32.const 12 + else + local.get $0 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end local.tee $3 call $~lib/rt/tlsf/searchBlock local.tee $0 @@ -595,8 +595,32 @@ if memory.size local.tee $0 + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end i32.const 4 - local.get $2 + local.get $1 i32.load offset=1568 local.get $0 i32.const 16 @@ -605,21 +629,6 @@ i32.sub i32.ne i32.shl - i32.const 1 - i32.const 27 - local.get $3 - i32.clz - i32.sub - i32.shl - i32.const 1 - i32.sub - local.get $3 - i32.add - local.get $3 - local.get $3 - i32.const 536870910 - i32.lt_u - select i32.add i32.const 65535 i32.add @@ -627,16 +636,16 @@ i32.and i32.const 16 i32.shr_u - local.tee $1 + local.tee $2 local.get $0 - local.get $1 + local.get $2 i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $2 memory.grow i32.const 0 i32.lt_s @@ -644,15 +653,16 @@ unreachable end end - local.get $2 + local.get $1 local.get $0 i32.const 16 i32.shl memory.size - i32.const 16 - i32.shl + i64.extend_i32_s + i64.const 16 + i64.shl call $~lib/rt/tlsf/addMemory - local.get $2 + local.get $1 local.get $3 call $~lib/rt/tlsf/searchBlock local.set $0 @@ -660,12 +670,12 @@ local.get $0 i32.load drop - local.get $2 + local.get $1 local.get $0 call $~lib/rt/tlsf/removeBlock local.get $0 i32.load - local.tee $1 + local.tee $2 i32.const -4 i32.and local.get $3 @@ -675,30 +685,30 @@ i32.ge_u if local.get $0 - local.get $1 + local.get $3 + local.get $2 i32.const 2 i32.and - local.get $3 i32.or i32.store - local.get $3 local.get $0 i32.const 4 i32.add + local.get $3 i32.add - local.tee $1 + local.tee $2 local.get $4 i32.const 4 i32.sub i32.const 1 i32.or i32.store - local.get $2 local.get $1 + local.get $2 call $~lib/rt/tlsf/insertBlock else local.get $0 - local.get $1 + local.get $2 i32.const -2 i32.and i32.store @@ -724,7 +734,7 @@ (func $assembly/index/heap_free (param $0 i32) (local $1 i32) local.get $0 - i32.const 17548 + i32.const 33932 i32.ge_u if global.get $~lib/rt/tlsf/ROOT diff --git a/tests/allocators/runner.js b/tests/allocators/runner.js index 041683a75d..b4601c7a92 100644 --- a/tests/allocators/runner.js +++ b/tests/allocators/runner.js @@ -78,7 +78,7 @@ export default function runner(exports, runs, allocs) { let ptr = alloc(64, 0); if (ptr !== base) throw Error("expected " + base + " but got " + ptr); reset(); - } catch (e) { + } catch { // should now be possible to reuse the entire memory // just try a large portion of the memory here, for example because of // SL+1 for allocations in TLSF diff --git a/tests/allocators/stub/debug.wat b/tests/allocators/stub/debug.wat index 456789f5c5..b5742af3e6 100644 --- a/tests/allocators/stub/debug.wat +++ b/tests/allocators/stub/debug.wat @@ -1,18 +1,18 @@ (module - (type $i32_=>_none (func (param i32))) - (type $none_=>_none (func)) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_=>_none (func (param i32 i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $0 (func (param i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/memory/__heap_base i32 (i32.const 140)) (memory $0 1) - (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (table $0 1 funcref) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "heap_alloc" (func $assembly/index/heap_alloc)) (export "heap_free" (func $assembly/index/heap_free)) @@ -26,6 +26,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) memory.size local.set $1 local.get $1 @@ -62,8 +63,8 @@ local.get $5 i32.gt_s select - local.set $4 - local.get $4 + local.set $6 + local.get $6 memory.grow i32.const 0 i32.lt_s @@ -107,19 +108,22 @@ i32.const 4 i32.add local.set $2 - local.get $0 - local.set $3 - local.get $3 - i32.const 4 - i32.add - i32.const 15 - i32.add - i32.const 15 - i32.const -1 - i32.xor - i32.and - i32.const 4 - i32.sub + block $~lib/rt/stub/computeSize|inlined.0 (result i32) + local.get $0 + local.set $3 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + br $~lib/rt/stub/computeSize|inlined.0 + end local.set $4 local.get $2 local.get $4 @@ -129,14 +133,21 @@ local.get $4 call $~lib/rt/common/BLOCK#set:mmInfo local.get $2 + return ) (func $~lib/memory/heap.alloc (param $0 i32) (result i32) local.get $0 call $~lib/rt/stub/__alloc + return ) (func $assembly/index/heap_alloc (param $0 i32) (result i32) local.get $0 call $~lib/memory/heap.alloc + return + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $0 i32) (result i32) + local.get $0 + i32.load ) (func $~lib/rt/stub/__free (param $0 i32) (local $1 i32) @@ -166,7 +177,7 @@ local.set $1 local.get $0 local.get $1 - i32.load + call $~lib/rt/common/BLOCK#get:mmInfo i32.add global.get $~lib/rt/stub/offset i32.eq diff --git a/tests/allocators/stub/package.json b/tests/allocators/stub/package.json index e2f1636974..d3053eec51 100644 --- a/tests/allocators/stub/package.json +++ b/tests/allocators/stub/package.json @@ -3,7 +3,7 @@ "type": "module", "scripts": { "build": "npm run build:debug && npm run build:release", - "build:debug": "node ../../../bin/asc assembly/index.ts -t debug.wat -o debug.wasm --runtime stub --sourceMap --stats", - "build:release": "node ../../../bin/asc assembly/index.ts -t release.wat -o release.wasm --runtime stub --sourceMap --stats --noAssert --optimize" + "build:debug": "node ../../../bin/toilscript assembly/index.ts -t debug.wat -o debug.wasm --runtime stub --sourceMap --stats", + "build:release": "node ../../../bin/toilscript assembly/index.ts -t release.wat -o release.wasm --runtime stub --sourceMap --stats --noAssert --optimize" } } diff --git a/tests/allocators/stub/release.wat b/tests/allocators/stub/release.wat index 2154376f9d..d9390e29cf 100644 --- a/tests/allocators/stub/release.wat +++ b/tests/allocators/stub/release.wat @@ -1,17 +1,17 @@ (module - (type $none_=>_none (func)) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_=>_none (func (param i32))) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32 i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (memory $0 1) - (data (i32.const 1036) "<") - (data (i32.const 1048) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1100) "<") - (data (i32.const 1112) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s") + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00s\00t\00u\00b\00.\00t\00s") (export "heap_alloc" (func $assembly/index/heap_alloc)) (export "heap_free" (func $assembly/index/heap_free)) (export "heap_reset" (func $assembly/index/heap_reset)) @@ -36,7 +36,7 @@ unreachable end global.get $~lib/rt/stub/offset - local.tee $1 + global.get $~lib/rt/stub/offset i32.const 4 i32.add local.tee $2 @@ -91,7 +91,6 @@ end local.get $3 global.set $~lib/rt/stub/offset - local.get $1 local.get $0 i32.store local.get $2 diff --git a/tests/asconfig/cyclical/extends.json b/tests/asconfig/cyclical/extends.json deleted file mode 100644 index 3420bc71bc..0000000000 --- a/tests/asconfig/cyclical/extends.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "./asconfig.json" -} diff --git a/tests/asconfig/entry-points/nested/asconfig.json b/tests/asconfig/entry-points/nested/asconfig.json deleted file mode 100644 index 92d84fcc96..0000000000 --- a/tests/asconfig/entry-points/nested/asconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../asconfig.json" -} diff --git a/tests/asconfig/entry-points/node-resolution/asconfig.json b/tests/asconfig/entry-points/node-resolution/asconfig.json deleted file mode 100644 index 93c3e4424d..0000000000 --- a/tests/asconfig/entry-points/node-resolution/asconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "entry-points/asconfig.json" -} diff --git a/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json deleted file mode 100644 index 33954ea9fd..0000000000 --- a/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../asconfig.json" -} diff --git a/tests/browser.js b/tests/browser.js index 0661990ef2..d004bae5da 100644 --- a/tests/browser.js +++ b/tests/browser.js @@ -1,13 +1,13 @@ -import * as asc from "../dist/asc.js"; +import * as toilscript from "../dist/cli.js"; -if (typeof asc.definitionFiles.assembly !== "string") throw Error("missing bundled assembly.d.ts"); -if (typeof asc.definitionFiles.portable !== "string") throw Error("missing bundled portable.d.ts"); +if (typeof toilscript.definitionFiles.assembly !== "string") throw Error("missing bundled assembly.d.ts"); +if (typeof toilscript.definitionFiles.portable !== "string") throw Error("missing bundled portable.d.ts"); const files = { "index.ts": `export function test(): void {}` }; -console.log("# asc --version"); +console.log("# toilscript --version"); { - const { stdout, stderr } = await asc.main([ "--version" ]); + const { stdout, stderr } = await toilscript.main([ "--version" ]); console.log(">>> STDOUT >>>"); process.stdout.write(stdout.toString()); @@ -15,9 +15,9 @@ console.log("# asc --version"); process.stdout.write(stderr.toString()); } -console.log("\n# asc --help"); +console.log("\n# toilscript --help"); { - const { stdout, stderr } = await asc.main([ "--help" ]); + const { stdout, stderr } = await toilscript.main([ "--help" ]); console.log(">>> STDOUT >>>"); process.stdout.write(stdout.toString()); @@ -25,9 +25,9 @@ console.log("\n# asc --help"); process.stdout.write(stderr.toString()); } -console.log("\n# asc index.ts --textFile"); +console.log("\n# toilscript index.ts --textFile"); { - const { error, stdout, stderr } = await asc.main([ "index.ts", "--textFile" ], { + const { error, stdout, stderr } = await toilscript.main([ "index.ts", "--textFile" ], { readFile: (name, baseDir) => { console.log("readFile: " + name + ", baseDir=" + baseDir); if (Object.prototype.hasOwnProperty.call(files, name)) return files[name]; @@ -52,9 +52,9 @@ console.log("\n# asc index.ts --textFile"); process.stdout.write(stderr.toString()); } -console.log("\n# asc.compileString"); +console.log("\n# toilscript.compileString"); { - const { stdout, stderr, text, binary } = await asc.compileString(`export function test(): void {}`, { optimizeLevel: 3, exportTable: true, stats: true }); + const { stdout, stderr, text, binary } = await toilscript.compileString(`export function test(): void {}`, { optimizeLevel: 3, exportTable: true, stats: true }); console.log(">>> .stdout >>>"); process.stdout.write(stdout.toString()); console.log(">>> .stderr >>>"); diff --git a/tests/compiler.js b/tests/compiler.js index 0b6018fa80..1a3d6c78fc 100644 --- a/tests/compiler.js +++ b/tests/compiler.js @@ -11,7 +11,7 @@ import * as optionsUtil from "../util/options.js"; import { coreCount, threadCount } from "../util/cpu.js"; import { diff } from "../util/text.js"; import { Rtrace } from "../lib/rtrace/index.js"; -import asc from "../dist/asc.js"; +import toilscript from "../dist/cli.js"; const dirname = path.dirname(fileURLToPath(import.meta.url)); const require = createRequire(import.meta.url); @@ -132,8 +132,8 @@ async function runTest(basename) { const configPath = path.join(basedir, basename + ".json"); const config = fs.existsSync(configPath) ? require(configPath) : {}; - const stdout = asc.createMemoryStream(); - const stderr = asc.createMemoryStream(chunk => process.stderr.write(chunk.toString().replace(/^(?!$)/mg, " "))); + const stdout = toilscript.createMemoryStream(); + const stderr = toilscript.createMemoryStream(chunk => process.stderr.write(chunk.toString().replace(/^(?!$)/mg, " "))); stderr.isTTY = true; const dummy = new Map(); const writeFile = Map.prototype.set.bind(dummy); @@ -254,10 +254,10 @@ async function runTest(basename) { if (config.features) { config.features.forEach(feature => { - if (!features.includes(feature) && !features.includes("*")) { + let featureConfig = featuresConfig[feature]; + if (!features.includes(feature) && !features.includes("*") && !featureConfig.enabled) { missing_features.push(feature); } - let featureConfig = featuresConfig[feature]; if (featureConfig.asc_flags) { featureConfig.asc_flags.forEach(flag => { Array.prototype.push.apply(asc_flags, flag.split(" ")); @@ -288,7 +288,7 @@ async function runTest(basename) { if (asc_flags) cmd.push(...asc_flags); if (args.noColors) cmd.push("--noColors"); const compileDebug = section("compile debug"); - const { error } = await asc.main(cmd, { stdout, stderr, writeFile }); + const { error } = await toilscript.main(cmd, { stdout, stderr, writeFile }); let expectStderr = config.stderr; if (error) { @@ -353,7 +353,7 @@ async function runTest(basename) { if (asc_flags) cmd.push(...asc_flags); if (args.noColors) cmd.push("--noColors"); const compileRelease = section("compile release"); - const { error } = await asc.main(cmd, { stdout, stderr, writeFile }); + const { error } = await toilscript.main(cmd, { stdout, stderr, writeFile }); if (error) { stderr.write("---\n"); @@ -410,7 +410,7 @@ async function runTest(basename) { ]; if (asc_flags) cmd.push(...asc_flags); const compileRtraced = section("compile rtraced"); - const { error } = await asc.main(cmd, { stdout, stderr }); + const { error } = await toilscript.main(cmd, { stdout, stderr }); if (error) { stderr.write("---\n"); diff --git a/tests/compiler/NonNullable.debug.wat b/tests/compiler/NonNullable.debug.wat index 52a1e1e96d..28df12368a 100644 --- a/tests/compiler/NonNullable.debug.wat +++ b/tests/compiler/NonNullable.debug.wat @@ -1,15 +1,17 @@ (module (type $0 (func)) (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $NonNullable/z (mut i32) (i32.const 224)) (global $~lib/memory/__data_end i32 (i32.const 364)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33132)) @@ -254,6 +256,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__ne (param $left i32) (param $right i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer diff --git a/tests/compiler/NonNullable.release.wat b/tests/compiler/NonNullable.release.wat index 03d6aaf8c0..645dc1eeab 100644 --- a/tests/compiler/NonNullable.release.wat +++ b/tests/compiler/NonNullable.release.wat @@ -1,9 +1,9 @@ (module - (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32 i32))) + (type $1 (func)) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34156)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -20,6 +20,41 @@ (data $5.1 (i32.const 1272) "\02\00\00\00^\00\00\00U\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00\'\00n\00u\00l\00l\00\'\00 \00(\00n\00o\00t\00 \00a\00s\00s\00i\00g\00n\00e\00d\00 \00o\00r\00 \00f\00a\00i\00l\00e\00d\00 \00c\00a\00s\00t\00)") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1388 + i32.lt_s + if + i32.const 34176 + i32.const 34224 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) diff --git a/tests/compiler/abi.debug.wat b/tests/compiler/abi.debug.wat index ea07555cab..98b74bc82c 100644 --- a/tests/compiler/abi.debug.wat +++ b/tests/compiler/abi.debug.wat @@ -2,8 +2,9 @@ (type $0 (func (result i32))) (type $1 (func)) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $abi/condition (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $abi/y (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 44)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32812)) @@ -190,4 +191,49 @@ (func $~start call $start:abi ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32832 + i32.const 32880 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/assert-nonnull.debug.wat b/tests/compiler/assert-nonnull.debug.wat index 1edc6edeed..4bcfff8cd2 100644 --- a/tests/compiler/assert-nonnull.debug.wat +++ b/tests/compiler/assert-nonnull.debug.wat @@ -1,13 +1,15 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32) (result i32))) (type $4 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 444)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33212)) @@ -70,6 +72,266 @@ unreachable end ) + (func $export:assert-nonnull/testVar (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testVar + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testObj (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testObj + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testProp (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testProp + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testArr (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testArr + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testElem (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testElem + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testAll (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testAll + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testAll2 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testAll2 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testFn (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testFn + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testFn2 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testFn2 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testRet (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testRet + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testObjFn (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testObjFn + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:assert-nonnull/testObjRet (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $assert-nonnull/testObjRet + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $assert-nonnull/testObj (param $foo i32) (result i32) (local $1 i32) (local $2 i32) @@ -173,7 +435,7 @@ if i32.const 224 i32.const 288 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -203,7 +465,7 @@ if i32.const 336 i32.const 288 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -281,7 +543,7 @@ if i32.const 224 i32.const 288 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -786,232 +1048,4 @@ local.get $3 return ) - (func $export:assert-nonnull/testVar (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testVar - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testObj (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testObj - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testProp (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testProp - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testArr (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testArr - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testElem (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testElem - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testAll (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testAll - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testAll2 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testAll2 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testFn (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testFn - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testFn2 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testFn2 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testRet (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testRet - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testObjFn (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testObjFn - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:assert-nonnull/testObjRet (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $assert-nonnull/testObjRet - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/assert-nonnull.release.wat b/tests/compiler/assert-nonnull.release.wat index aabd543b52..957caace1f 100644 --- a/tests/compiler/assert-nonnull.release.wat +++ b/tests/compiler/assert-nonnull.release.wat @@ -1,7 +1,7 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34236)) (memory $0 1) (data $0 (i32.const 1036) "|") @@ -27,6 +27,41 @@ (export "testRet" (func $export:assert-nonnull/testRet)) (export "testObjFn" (func $export:assert-nonnull/testObjFn)) (export "testObjRet" (func $export:assert-nonnull/testObjRet)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1468 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $0 i32) (result i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -55,7 +90,7 @@ if i32.const 1248 i32.const 1312 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -628,7 +663,7 @@ if i32.const 1248 i32.const 1312 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -647,7 +682,7 @@ if i32.const 1360 i32.const 1312 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/assignment-chain.debug.wat b/tests/compiler/assignment-chain.debug.wat index 340796c987..9427163890 100644 --- a/tests/compiler/assignment-chain.debug.wat +++ b/tests/compiler/assignment-chain.debug.wat @@ -4,14 +4,15 @@ (type $2 (func)) (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i64))) - (type $7 (func (param i32 f64))) - (type $8 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i64))) + (type $8 (func (param i32 f64))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) (type $11 (func (param f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -23,6 +24,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -233,7 +235,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2336,58 +2338,6 @@ call $assignment-chain/setter_assignment_chain call $assignment-chain/static_setter_assignment_chain ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $assignment-chain/B - block $assignment-chain/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $assignment-chain/A $assignment-chain/B $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:assignment-chain ) @@ -2404,6 +2354,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $assignment-chain/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2729,4 +2711,56 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $assignment-chain/B + block $assignment-chain/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $assignment-chain/A $assignment-chain/B $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/assignment-chain.release.wat b/tests/compiler/assignment-chain.release.wat index fb11835ac0..627335350d 100644 --- a/tests/compiler/assignment-chain.release.wat +++ b/tests/compiler/assignment-chain.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (param i32) (result i32))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -39,6 +39,41 @@ (export "static_setter_assignment_chain" (func $assignment-chain/static_setter_assignment_chain)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1532 + i32.lt_s + if + i32.const 34320 + i32.const 34368 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -77,7 +112,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$129 + block $__inlined_func$~lib/rt/itcms/Object#unlink$130 local.get $1 i32.load offset=4 i32.const -4 @@ -101,7 +136,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$129 + br $__inlined_func$~lib/rt/itcms/Object#unlink$130 end local.get $1 i32.load offset=8 @@ -144,7 +179,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bigint-integration.debug.wat b/tests/compiler/bigint-integration.debug.wat index 467f67dec1..9cc7019e7a 100644 --- a/tests/compiler/bigint-integration.debug.wat +++ b/tests/compiler/bigint-integration.debug.wat @@ -1,10 +1,11 @@ (module - (type $0 (func (result i64))) - (type $1 (func)) - (type $2 (func (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i64))) (import "bigint-integration" "externalValue" (global $bigint-integration/externalValue i64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "bigint-integration" "getExternalValue" (func $bigint-integration/getExternalValue (result i64))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $bigint-integration/internalValue i64 (i64.const 9007199254740991)) (global $~lib/memory/__data_end i32 (i32.const 76)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) @@ -57,4 +58,49 @@ global.set $~started call $start:bigint-integration ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/bigint-integration.release.wat b/tests/compiler/bigint-integration.release.wat index 6702bb5684..3b0c5b8507 100644 --- a/tests/compiler/bigint-integration.release.wat +++ b/tests/compiler/bigint-integration.release.wat @@ -1,11 +1,13 @@ (module (type $0 (func (result i64))) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) (type $2 (func)) + (type $3 (func (param i32 i32 i32 i32))) (import "bigint-integration" "externalValue" (global $bigint-integration/externalValue i64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "bigint-integration" "getExternalValue" (func $bigint-integration/getExternalValue (result i64))) (global $bigint-integration/internalValue i64 (i64.const 9007199254740991)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data $0 (i32.const 1036) "<") @@ -14,6 +16,40 @@ (export "getInternalValue" (func $bigint-integration/getInternalValue)) (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start global.get $~started if @@ -28,7 +64,6 @@ i32.const 0 i32.const 1056 i32.const 4 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -39,7 +74,6 @@ i32.const 0 i32.const 1056 i32.const 5 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/bindings/esm.debug.js b/tests/compiler/bindings/esm.debug.js index e1a514ba47..e4e2421f4f 100644 --- a/tests/compiler/bindings/esm.debug.js +++ b/tests/compiler/bindings/esm.debug.js @@ -34,7 +34,7 @@ async function instantiate(module, imports = {}) { })(); }, abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/esm.debug.wat b/tests/compiler/bindings/esm.debug.wat index a6850592f3..fe16f22960 100644 --- a/tests/compiler/bindings/esm.debug.wat +++ b/tests/compiler/bindings/esm.debug.wat @@ -25,7 +25,7 @@ (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) (import "env" "Math.log" (func $~lib/bindings/dom/Math.log (param f64) (result f64))) (import "env" "Date.getTimezoneOffset" (func $bindings/esm/Date_getTimezoneOffset (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $bindings/esm/plainGlobal i32 (i32.const 1)) (global $bindings/esm/plainMutableGlobal (mut i32) (i32.const 2)) (global $bindings/esm/stringGlobal i32 (i32.const 32)) @@ -42,6 +42,8 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -359,7 +361,7 @@ if i32.const 528 i32.const 592 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2856,212 +2858,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $bindings/esm/stringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/esm/mutableStringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 528 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 944 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1072 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1136 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=56 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=60 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=64 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/typedarray/Uint8Array - block $bindings/esm/PlainObject - block $~lib/array/Array<~lib/string/String> - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/typedarray/Uint64Array - block $~lib/typedarray/Float32Array - block $~lib/typedarray/Int16Array - block $~lib/function/Function<%28%29=>void> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array<~lib/string/String> $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $bindings/esm/NonPlainObject $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $bindings/esm/PlainObject~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - return - end - unreachable - ) (func $~setArgumentsLength (param $0 i32) local.get $0 global.set $~argumentsLength @@ -3105,139 +2901,53 @@ unreachable end ) - (func $bindings/esm/bufferFunction (param $a i32) (param $b i32) (result i32) - (local $aByteLength i32) - (local $bByteLength i32) - (local $out i32) - (local $5 i32) + (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $aByteLength - local.get $b - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $0 i32.store - local.get $5 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bByteLength global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $aByteLength - local.get $bByteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $out + local.get $1 i32.store offset=4 - local.get $out - local.get $a - local.get $aByteLength - memory.copy - local.get $out - local.get $aByteLength - i32.add - local.get $b - local.get $bByteLength - memory.copy - local.get $out - local.set $5 + local.get $0 + local.get $1 + call $bindings/esm/bufferFunction + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 - return + local.get $2 ) - (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) - (local $thisSize i32) - (local $otherSize i32) - (local $outSize i32) - (local $out i32) - (local $6 i32) + (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $thisSize - local.get $other - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $0 i32.store - local.get $6 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $otherSize - local.get $thisSize - local.get $otherSize - i32.add - local.set $outSize - local.get $outSize - i32.const 0 - i32.eq - if - i32.const 736 - local.set $6 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $6 - return - end global.get $~lib/memory/__stack_pointer - local.get $outSize - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out + local.get $1 i32.store offset=4 - local.get $out - local.get $this - local.get $thisSize - memory.copy - local.get $out - local.get $thisSize - i32.add - local.get $other - local.get $otherSize - memory.copy - local.get $out - local.set $6 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 - return + local.get $2 ) - (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3245,30 +2955,22 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $left - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $right - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String#concat + local.get $0 + local.get $1 + call $bindings/esm/stringFunctionOptional@varargs local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunction (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3276,30 +2978,22 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $b - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String.__concat + local.get $0 + local.get $1 + call $bindings/esm/typedarrayFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunctionOptional (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3307,221 +3001,144 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $b - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String.__concat + local.get $0 + local.get $1 + call $bindings/esm/staticarrayFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunctionOptional@varargs (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/staticarrayU16 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/staticarrayU16 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:bindings/esm/staticarrayI64 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/staticarrayI64 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $0 + i32.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 64 - local.tee $b - i32.store - end - local.get $a + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/arrayFunction local.set $2 global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $2 + ) + (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store offset=4 - local.get $2 - local.get $b + local.get $0 + local.get $1 + call $bindings/esm/arrayOfStringsFunction local.set $2 global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $2 - i32.store offset=8 - local.get $2 - call $bindings/esm/stringFunctionOptional + ) + (func $export:bindings/esm/objectFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/objectFunction local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) - (local $buffer i32) - (local $4 i32) + (func $export:bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $length - i32.const 1073741820 - local.get $alignLog2 - i32.shr_u - i32.gt_u - if - i32.const 224 - i32.const 272 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - local.get $alignLog2 - i32.shl - local.tee $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store offset=8 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=12 - local.get $4 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $length - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 + local.get $0 + i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - local.get $length - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this + local.get $0 + local.get $1 + call $bindings/esm/internrefFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3529,7 +3146,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) + (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3537,272 +3154,747 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u + local.get $0 + call $bindings/esm/functionFunction local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer local.get $1 - return ) - (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) - (local $1 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store i32.const 0 - i32.store - local.get $this - local.set $1 + drop + local.get $message + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $4 i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - local.set $1 + local.get $4 + local.get $fileName + local.set $4 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) - (func $~lib/typedarray/Int16Array#__get (param $this i32) (param $index i32) (result i32) - (local $2 i32) + (func $bindings/esm/bufferFunction (param $a i32) (param $b i32) (result i32) + (local $aByteLength i32) + (local $bByteLength i32) + (local $out i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $2 + i64.const 0 + i64.store + local.get $a + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 452 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $2 + local.get $5 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $aByteLength + local.get $b + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 1 - i32.shl + local.get $5 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bByteLength + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $aByteLength + local.get $bByteLength i32.add - i32.load16_s - local.set $2 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $out + i32.store offset=4 + local.get $out + local.get $a + local.get $aByteLength + memory.copy + local.get $out + local.get $aByteLength + i32.add + local.get $b + local.get $bByteLength + memory.copy + local.get $out + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $5 return ) - (func $~lib/typedarray/Uint64Array#__set (param $this i32) (param $index i32) (param $value i64) - (local $3 i32) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index + i64.const 0 + i64.store local.get $this - local.set $3 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $6 i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 1173 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $6 i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 3 + local.get $6 + call $~lib/string/String#get:length + i32.const 1 i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize i32.add - local.get $value - i64.store + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 736 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $6 + return ) - (func $~lib/typedarray/Float32Array#__get (param $this i32) (param $index i32) (result f32) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) (local $2 i32) - (local $3 f32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this + i64.const 0 + i64.store + local.get $left local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 1304 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this + local.get $right local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store offset=4 local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 2 - i32.shl - i32.add - f32.load - local.set $3 + call $~lib/string/String#concat + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $2 return ) - (func $bindings/esm/typedarrayFunction (param $a i32) (param $b i32) (result i32) - (local $out i32) - (local $i i32) - (local $i|4 i32) - (local $5 i32) + (func $bindings/esm/stringFunction (param $a i32) (param $b i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store + local.get $a + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + local.get $2 + i32.store + local.get $2 + local.get $b + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $bindings/esm/stringFunctionOptional (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $a - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 i32.store - local.get $5 - call $~lib/typedarray/Int16Array#get:length + local.get $2 local.get $b - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/typedarray/Float32Array#get:length - i32.add - call $~lib/typedarray/Uint64Array#constructor - local.tee $out + local.get $2 i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $bindings/esm/stringFunctionOptional@varargs (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $a - local.set $5 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $5 + i32.const 64 + local.tee $b i32.store - local.get $5 - call $~lib/typedarray/Int16Array#get:length - i32.lt_s - if - local.get $out - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - local.get $i - local.get $a - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=8 - local.get $5 - local.get $i - call $~lib/typedarray/Int16Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end end - i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $bindings/esm/stringFunctionOptional + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) + (local $buffer i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $length + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 224 + i32.const 272 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + local.get $alignLog2 + i32.shl + local.tee $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $length + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Int16Array#__get (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 453 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Uint64Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 1174 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Float32Array#__get (param $this i32) (param $index i32) (result f32) + (local $2 i32) + (local $3 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 1305 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + f32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $bindings/esm/typedarrayFunction (param $a i32) (param $b i32) (result i32) + (local $out i32) + (local $i i32) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Int16Array#get:length + local.get $b + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Float32Array#get:length + i32.add + call $~lib/typedarray/Uint64Array#constructor + local.tee $out + i32.store offset=4 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Int16Array#get:length + i32.lt_s + if + local.get $out + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $i + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + local.get $i + call $~lib/typedarray/Int16Array#__get + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 0 local.set $i|4 loop $for-loop|1 local.get $i|4 @@ -3879,7 +3971,7 @@ if i32.const 528 i32.const 832 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -3924,7 +4016,7 @@ if i32.const 528 i32.const 832 - i32.const 93 + i32.const 95 i32.const 41 call $~lib/builtins/abort unreachable @@ -4135,7 +4227,7 @@ if i32.const 224 i32.const 896 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -4254,7 +4346,7 @@ if i32.const 528 i32.const 896 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -4388,6 +4480,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -4428,7 +4524,7 @@ if i32.const 528 i32.const 896 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -4663,7 +4759,7 @@ if i32.const 224 i32.const 896 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -4782,7 +4878,7 @@ if i32.const 528 i32.const 896 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -4812,7 +4908,7 @@ if i32.const 944 i32.const 896 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -4852,7 +4948,7 @@ if i32.const 528 i32.const 896 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -4890,6 +4986,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -5237,160 +5337,40 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:a - i32.add - call $bindings/esm/PlainObject#set:a - local.get $ref - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $a - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:b - local.get $b - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:b - i32.add - call $bindings/esm/PlainObject#set:b - local.get $ref - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:length_ - i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - local.get $this - local.set $5 + local.get $3 + call $bindings/esm/PlainObject#get:a + i32.add + call $bindings/esm/PlainObject#set:a + local.get $ref + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $3 + i32.store offset=4 + local.get $3 + local.get $a + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=8 + local.get $3 + call $bindings/esm/PlainObject#get:b + local.get $b + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $bindings/esm/PlainObject#get:b + i32.add + call $bindings/esm/PlainObject#set:b + local.get $ref + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $3 + return ) (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) (local $buffer i32) @@ -5453,7 +5433,7 @@ if i32.const 224 i32.const 832 - i32.const 51 + i32.const 53 i32.const 60 call $~lib/builtins/abort unreachable @@ -5537,268 +5517,342 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $bindings/esm/stringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/esm/mutableStringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 528 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 944 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1072 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1136 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=4 + call $~lib/object/Object~visit local.get $0 + i32.load local.get $1 - call $bindings/esm/bufferFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 + call $~lib/rt/itcms/__visit ) - (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=4 + call $~lib/object/Object~visit local.get $0 + i32.load offset=56 local.get $1 - call $bindings/esm/stringFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=60 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=64 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/typedarray/Uint8Array + block $bindings/esm/PlainObject + block $~lib/array/Array<~lib/string/String> + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Int16Array + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array<~lib/string/String> $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $bindings/esm/NonPlainObject $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $bindings/esm/PlainObject~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + return + end + unreachable ) - (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/stringFunctionOptional@varargs + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - ) - (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/typedarrayFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 ) - (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/staticarrayFunction + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - ) - (func $export:bindings/esm/staticarrayU16 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 i32.store - local.get $0 - call $bindings/esm/staticarrayU16 - local.set $1 + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) - (func $export:bindings/esm/staticarrayI64 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $bindings/esm/staticarrayI64 - local.set $1 + (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/arrayFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/arrayOfStringsFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/objectFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/objectFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/internrefFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:length_ + i32.const 2 + i32.shl i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store - local.get $0 - call $bindings/esm/functionFunction - local.set $1 + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/bindings/esm.release.js b/tests/compiler/bindings/esm.release.js index 4f91c23e94..193f7090cf 100644 --- a/tests/compiler/bindings/esm.release.js +++ b/tests/compiler/bindings/esm.release.js @@ -34,7 +34,7 @@ async function instantiate(module, imports = {}) { })(); }, abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/esm.release.wat b/tests/compiler/bindings/esm.release.wat index 4fa9022ad2..caf0a13b46 100644 --- a/tests/compiler/bindings/esm.release.wat +++ b/tests/compiler/bindings/esm.release.wat @@ -6,15 +6,15 @@ (type $4 (func (result i32))) (type $5 (func)) (type $6 (func (param i32 i32))) - (type $7 (func (param i32 i32 i64))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64))) (type $9 (func (param i32 i32 f64 f64 f64 f64 f64))) (type $10 (func (param f64) (result f64))) (type $11 (func (param i64 i64) (result i64))) (type $12 (func (result i64))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) (import "env" "Math.log" (func $~lib/bindings/dom/Math.log (param f64) (result f64))) (import "env" "Date.getTimezoneOffset" (func $bindings/esm/Date_getTimezoneOffset (result i32))) @@ -120,6 +120,41 @@ (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) (export "functionFunction" (func $export:bindings/esm/staticarrayU16)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + if + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -848,7 +883,7 @@ if i32.const 1552 i32.const 1616 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1579,7 +1614,7 @@ if i32.const 1552 i32.const 1792 - i32.const 1173 + i32.const 1174 i32.const 64 call $~lib/builtins/abort unreachable @@ -1664,7 +1699,7 @@ if i32.const 1552 i32.const 1856 - i32.const 93 + i32.const 95 i32.const 41 call $~lib/builtins/abort unreachable @@ -1717,7 +1752,7 @@ if i32.const 1552 i32.const 1856 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -2163,7 +2198,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$269 + block $__inlined_func$~lib/rt/itcms/__renew$263 i32.const 1073741820 local.get $2 i32.const 1 @@ -2206,7 +2241,7 @@ i32.store offset=16 local.get $2 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$269 + br $__inlined_func$~lib/rt/itcms/__renew$263 end local.get $3 local.get $4 @@ -2282,7 +2317,7 @@ if i32.const 1552 i32.const 1920 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2349,7 +2384,7 @@ if i32.const 1552 i32.const 1920 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2372,7 +2407,7 @@ if i32.const 1968 i32.const 1920 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -2417,7 +2452,7 @@ if i32.const 1552 i32.const 1920 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2480,7 +2515,7 @@ if i32.const 1552 i32.const 1920 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2563,7 +2598,7 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store - block $__inlined_func$~lib/string/String#concat$284 + block $__inlined_func$~lib/string/String#concat$286 local.get $1 i32.const 20 i32.sub @@ -2582,7 +2617,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1760 local.set $2 - br $__inlined_func$~lib/string/String#concat$284 + br $__inlined_func$~lib/string/String#concat$286 end global.get $~lib/memory/__stack_pointer local.get $2 @@ -2828,36 +2863,13 @@ global.set $~lib/rt/itcms/threshold ) (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - if - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/typedarrayFunction - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f32) + (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -2887,261 +2899,593 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - i32.const 1088 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 1088 - i32.store - end + global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=4 + i32.store + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.set $4 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=8 - local.get $0 + local.tee $2 + i32.store local.get $1 - call $bindings/esm/stringFunction - global.get $~lib/memory/__stack_pointer - i32.const 12 + call $~lib/typedarray/Float32Array#get:length + local.get $4 i32.add - global.set $~lib/memory/__stack_pointer + local.set $6 global.get $~lib/memory/__stack_pointer i32.const 8 - i32.add + i32.sub global.set $~lib/memory/__stack_pointer - return - end - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - ) - (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - if - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/stringFunction - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner1 global.get $~lib/memory/__stack_pointer i32.const 2276 i32.lt_s - br_if $folding-inner1 + br_if $folding-inner0 global.get $~lib/memory/__stack_pointer - local.get $0 + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 - block $__inlined_func$bindings/esm/staticarrayFunction$1 (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $1 + i32.eqz + if global.get $~lib/memory/__stack_pointer i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.add - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1248 - i32.const 1856 - i32.const 51 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 2 - i32.shl - i32.const 8 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - loop $for-loop|0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $2 - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 - local.get $4 - local.get $2 - local.get $0 - local.get $2 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 - end + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $6 + i32.const 134217727 + i32.gt_u + if + i32.const 1248 + i32.const 1296 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.const 3 + i32.shl + local.tee $8 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $1 + local.get $6 + i32.store + local.get $1 + local.get $6 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $3 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.shr_u + i32.ge_u + if + i32.const 1552 + i32.const 1792 + i32.const 453 + i32.const 64 + call $~lib/builtins/abort + unreachable end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $3 + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + local.get $4 + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/typedarray/Float32Array#get:length + local.get $3 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.add + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $2 - loop $for-loop|1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $2 - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 - local.get $2 - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.add - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $4 - local.get $3 - local.get $1 - local.get $2 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|1 - end + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $3 + local.get $2 + i32.load offset=8 + i32.const 2 + i32.shr_u + i32.ge_u + if + i32.const 1552 + i32.const 1792 + i32.const 1305 + i32.const 64 + call $~lib/builtins/abort + unreachable end global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.get $3 + i32.const 2 + i32.shl + i32.add + f32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 local.get $4 - br $__inlined_func$bindings/esm/staticarrayFunction$1 + local.get $5 + i64.trunc_sat_f32_u + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 end - br $folding-inner1 end global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + i32.const 1088 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 1088 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + if + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.add + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $4 + i32.const 268435455 + i32.gt_u + if + i32.const 1248 + i32.const 1856 + i32.const 53 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + i32.shl + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $4 + local.get $2 + local.get $0 + local.get $2 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + i32.const 0 + local.set $2 + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $2 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.add + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $4 + local.get $3 + local.get $1 + local.get $2 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $4 return end i32.const 35072 @@ -3184,7 +3528,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - block $__inlined_func$bindings/esm/PlainObject#constructor$4 (result i32) + block $__inlined_func$bindings/esm/PlainObject#constructor$2 (result i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -3347,7 +3691,7 @@ i32.add global.set $~lib/memory/__stack_pointer local.get $2 - br $__inlined_func$bindings/esm/PlainObject#constructor$4 + br $__inlined_func$bindings/esm/PlainObject#constructor$2 end br $folding-inner1 end @@ -3529,263 +3873,9 @@ i32.add local.get $1 local.get $4 - memory.copy - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - return - end - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - ) - (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - call $~lib/array/Array#get:length - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length - local.get $4 - i32.add - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 12 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store - local.get $5 - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=12 - local.get $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1248 - i32.const 1920 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 8 - local.get $4 - local.get $4 - i32.const 8 - i32.le_u - select - i32.const 2 - i32.shl - local.tee $6 - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $3 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=12 - local.get $5 - local.get $3 - i32.store - local.get $5 - local.get $3 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $3 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $6 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $4 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - loop $for-loop|0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $~lib/array/Array#get:length - local.get $2 - i32.gt_s - if - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=12 - local.get $0 - local.get $2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $5 - local.get $2 - local.get $3 - call $~lib/array/Array<~lib/string/String>#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 - end - end - i32.const 0 - local.set $2 - loop $for-loop|1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length - local.get $2 - i32.gt_s - if - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=12 - local.get $0 - call $~lib/array/Array#get:length - local.get $2 - i32.add - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=12 - local.get $1 - local.get $2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=8 - local.get $5 - local.get $3 - local.get $4 - call $~lib/array/Array<~lib/string/String>#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|1 - end - end + memory.copy global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3802,7 +3892,7 @@ call $~lib/builtins/abort unreachable ) - (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3824,7 +3914,7 @@ local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3835,8 +3925,8 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 global.get $~lib/memory/__stack_pointer local.get $0 i32.store @@ -3851,7 +3941,7 @@ call $~lib/array/Array#get:length local.get $4 i32.add - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer i32.const 16 i32.sub @@ -3868,99 +3958,99 @@ i64.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 16 - i32.const 11 + i32.const 12 call $~lib/rt/itcms/__new - local.tee $6 + local.tee $5 i32.store global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store - local.get $6 + local.get $5 i32.const 0 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=12 - local.get $5 + local.get $4 i32.const 268435455 i32.gt_u if i32.const 1248 i32.const 1920 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 8 - local.get $5 - local.get $5 + local.get $4 + local.get $4 i32.const 8 i32.le_u select i32.const 2 i32.shl - local.tee $3 + local.tee $6 i32.const 1 call $~lib/rt/itcms/__new - local.tee $4 + local.tee $3 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $3 i32.store offset=12 - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.store - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 + local.get $5 local.get $6 - local.get $3 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 local.get $5 + local.get $4 i32.store offset=12 global.get $~lib/memory/__stack_pointer i32.const 16 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 loop $for-loop|0 global.get $~lib/memory/__stack_pointer @@ -3972,17 +4062,22 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=8 - local.get $6 - local.get $2 + i32.store offset=12 local.get $0 local.get $2 - call $~lib/array/Array#__get - call $~lib/array/Array#__set + call $~lib/array/Array<~lib/string/String>#__get + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $5 + local.get $2 + local.get $3 + call $~lib/array/Array<~lib/string/String>#__set local.get $2 i32.const 1 i32.add @@ -4002,11 +4097,11 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=8 + i32.store offset=12 local.get $0 call $~lib/array/Array#get:length local.get $2 @@ -4014,13 +4109,18 @@ local.set $3 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=8 - local.get $6 - local.get $3 + i32.store offset=12 local.get $1 local.get $2 - call $~lib/array/Array#__get - call $~lib/array/Array#__set + call $~lib/array/Array<~lib/string/String>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $5 + local.get $3 + local.get $4 + call $~lib/array/Array<~lib/string/String>#__set local.get $2 i32.const 1 i32.add @@ -4029,14 +4129,14 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $5 return end i32.const 35072 @@ -4046,15 +4146,14 @@ call $~lib/builtins/abort unreachable ) - (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 f32) + (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner1 @@ -4063,304 +4162,213 @@ i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer local.get $0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.set $5 - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store - block $__inlined_func$~lib/typedarray/Uint64Array#constructor (result i32) - local.get $1 - call $~lib/typedarray/Float32Array#get:length - local.get $5 - i32.add - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner00 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner00 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner00 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $2 - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store - local.get $2 - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=8 - local.get $5 - i32.const 134217727 - i32.gt_u - if - i32.const 1248 - i32.const 1296 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 3 - i32.shl - local.tee $7 - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=12 - local.get $2 - local.get $5 - i32.store - local.get $2 - local.get $5 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $5 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $7 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - br $__inlined_func$~lib/typedarray/Uint64Array#constructor - end - br $folding-inner1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/array/Array#get:length + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length + local.get $4 + i32.add + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store + local.get $6 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 268435455 + i32.gt_u + if + i32.const 1248 + i32.const 1920 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable end - local.tee $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $5 + local.get $5 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $6 + local.get $4 + i32.store + local.get $6 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 i32.store offset=4 loop $for-loop|0 global.get $~lib/memory/__stack_pointer local.get $0 i32.store local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $6 i32.store global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $3 - local.get $0 - i32.load offset=8 - i32.const 1 - i32.shr_u - i32.ge_u - if - i32.const 1552 - i32.const 1792 - i32.const 452 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store + local.get $6 + local.get $2 local.get $0 - i32.load offset=4 - local.get $3 - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - local.get $3 - local.get $5 - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end i32.const 0 - local.set $3 + local.set $2 loop $for-loop|1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store local.get $1 - call $~lib/typedarray/Float32Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $6 i32.store global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=8 local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.add - local.set $5 + local.set $3 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store + local.get $6 local.get $3 local.get $1 - i32.load offset=8 - i32.const 2 - i32.shr_u - i32.ge_u - if - i32.const 1552 - i32.const 1792 - i32.const 1304 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - i32.load offset=4 - local.get $3 - i32.const 2 - i32.shl - i32.add - f32.load - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - local.get $5 - local.get $4 - i64.trunc_sat_f32_u - call $~lib/typedarray/Uint64Array#__set - local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|1 end end @@ -4368,7 +4376,11 @@ i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 return end i32.const 35072 diff --git a/tests/compiler/bindings/noExportRuntime.debug.js b/tests/compiler/bindings/noExportRuntime.debug.js index bdf08ae5ff..50dfd34e18 100644 --- a/tests/compiler/bindings/noExportRuntime.debug.js +++ b/tests/compiler/bindings/noExportRuntime.debug.js @@ -2,7 +2,7 @@ async function instantiate(module, imports = {}) { const adaptedImports = { env: Object.setPrototypeOf({ abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/noExportRuntime.debug.wat b/tests/compiler/bindings/noExportRuntime.debug.wat index ba2e2f6010..e51b1ad8e4 100644 --- a/tests/compiler/bindings/noExportRuntime.debug.wat +++ b/tests/compiler/bindings/noExportRuntime.debug.wat @@ -9,12 +9,14 @@ (type $7 (func (param i32 i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $bindings/noExportRuntime/isBasic (mut i32) (i32.const 0)) (global $bindings/noExportRuntime/isString i32 (i32.const 32)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -254,7 +256,7 @@ if i32.const 368 i32.const 432 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2418,148 +2420,6 @@ ) (func $bindings/noExportRuntime/takesFunction (param $fn i32) ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $bindings/noExportRuntime/isString - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/noExportRuntime/isBuffer - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/noExportRuntime/isTypedArray - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/noExportRuntime/isArrayOfBasic - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/noExportRuntime/isArrayOfArray - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 368 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 176 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/array/Array>#get:dataStart (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/array/Array<~lib/array/Array>#get:length_ (param $this i32) (result i32) - local.get $this - i32.load offset=12 - ) - (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $bindings/noExportRuntime/NonPlainObject - block $~lib/array/Array<~lib/array/Array> - block $~lib/array/Array - block $~lib/typedarray/Int32Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int32Array $~lib/array/Array $~lib/array/Array<~lib/array/Array> $bindings/noExportRuntime/NonPlainObject $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>~visit - return - end - return - end - unreachable - ) (func $~start global.get $~started if @@ -2582,6 +2442,70 @@ unreachable end ) + (func $export:bindings/noExportRuntime/takesNonPlainObject (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/noExportRuntime/takesNonPlainObject + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $export:bindings/noExportRuntime/takesFunction (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/noExportRuntime/takesFunction + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) (local $buffer i32) (local $4 i32) @@ -2733,6 +2657,189 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 64 + i32.const 112 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $bindings/noExportRuntime/isString + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/noExportRuntime/isBuffer + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/noExportRuntime/isTypedArray + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/noExportRuntime/isArrayOfBasic + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/noExportRuntime/isArrayOfArray + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 368 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 176 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<~lib/array/Array>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $bindings/noExportRuntime/NonPlainObject + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array + block $~lib/typedarray/Int32Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int32Array $~lib/array/Array $~lib/array/Array<~lib/array/Array> $bindings/noExportRuntime/NonPlainObject $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>~visit + return + end + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2743,6 +2850,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -2772,6 +2883,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -2829,77 +2944,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) - (local $buffer i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - i32.const 1073741820 - i32.gt_u - if - i32.const 64 - i32.const 112 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $buffer - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $export:bindings/noExportRuntime/takesNonPlainObject (param $0 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $bindings/noExportRuntime/takesNonPlainObject - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $export:bindings/noExportRuntime/takesFunction (param $0 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $bindings/noExportRuntime/takesFunction - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) ) diff --git a/tests/compiler/bindings/noExportRuntime.release.js b/tests/compiler/bindings/noExportRuntime.release.js index 24a1b9596b..118f207742 100644 --- a/tests/compiler/bindings/noExportRuntime.release.js +++ b/tests/compiler/bindings/noExportRuntime.release.js @@ -2,7 +2,7 @@ async function instantiate(module, imports = {}) { const adaptedImports = { env: Object.setPrototypeOf({ abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/noExportRuntime.release.wat b/tests/compiler/bindings/noExportRuntime.release.wat index 8db482731d..427ea5b246 100644 --- a/tests/compiler/bindings/noExportRuntime.release.wat +++ b/tests/compiler/bindings/noExportRuntime.release.wat @@ -3,11 +3,11 @@ (type $1 (func (param i32))) (type $2 (func (param i32 i32))) (type $3 (func)) - (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $bindings/noExportRuntime/isBasic (mut i32) (i32.const 0)) (global $bindings/noExportRuntime/isString i32 (i32.const 1056)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -68,6 +68,41 @@ (export "_start" (func $~start)) (export "takesNonPlainObject" (func $export:bindings/noExportRuntime/takesNonPlainObject)) (export "takesFunction" (func $export:bindings/noExportRuntime/takesNonPlainObject)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1780 + i32.lt_s + if + i32.const 34576 + i32.const 34624 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -821,7 +856,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$132 + block $__inlined_func$~lib/rt/itcms/Object#unlink$133 local.get $0 i32.load offset=4 i32.const -4 @@ -845,7 +880,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$132 + br $__inlined_func$~lib/rt/itcms/Object#unlink$133 end local.get $0 i32.load offset=8 @@ -888,7 +923,7 @@ if i32.const 1392 i32.const 1456 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/raw.debug.js b/tests/compiler/bindings/raw.debug.js index 564035a225..5ecef61fe5 100644 --- a/tests/compiler/bindings/raw.debug.js +++ b/tests/compiler/bindings/raw.debug.js @@ -34,7 +34,7 @@ export async function instantiate(module, imports = {}) { })(); }, abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/raw.debug.wat b/tests/compiler/bindings/raw.debug.wat index c54a11e383..377a4d465a 100644 --- a/tests/compiler/bindings/raw.debug.wat +++ b/tests/compiler/bindings/raw.debug.wat @@ -25,7 +25,7 @@ (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) (import "env" "Math.log" (func $~lib/bindings/dom/Math.log (param f64) (result f64))) (import "env" "Date.getTimezoneOffset" (func $bindings/esm/Date_getTimezoneOffset (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $bindings/esm/plainGlobal i32 (i32.const 1)) (global $bindings/esm/plainMutableGlobal (mut i32) (i32.const 2)) (global $bindings/esm/stringGlobal i32 (i32.const 32)) @@ -42,6 +42,8 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -362,7 +364,7 @@ if i32.const 528 i32.const 592 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2859,212 +2861,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 528 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 944 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1072 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1136 - local.get $0 - call $~lib/rt/itcms/__visit - global.get $bindings/esm/stringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $bindings/esm/mutableStringGlobal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=56 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=60 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=64 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $bindings/esm/NonPlainObject - block $~lib/typedarray/Uint8Array - block $bindings/esm/PlainObject - block $~lib/array/Array<~lib/string/String> - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/typedarray/Uint64Array - block $~lib/typedarray/Float32Array - block $~lib/typedarray/Int16Array - block $~lib/function/Function<%28%29=>void> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array<~lib/string/String> $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $bindings/esm/NonPlainObject $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $bindings/esm/PlainObject~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - return - end - unreachable - ) (func $~setArgumentsLength (param $0 i32) local.get $0 global.set $~argumentsLength @@ -3108,139 +2904,53 @@ unreachable end ) - (func $bindings/esm/bufferFunction (param $a i32) (param $b i32) (result i32) - (local $aByteLength i32) - (local $bByteLength i32) - (local $out i32) - (local $5 i32) + (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $aByteLength - local.get $b - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $0 i32.store - local.get $5 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bByteLength global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $aByteLength - local.get $bByteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $out + local.get $1 i32.store offset=4 - local.get $out - local.get $a - local.get $aByteLength - memory.copy - local.get $out - local.get $aByteLength - i32.add - local.get $b - local.get $bByteLength - memory.copy - local.get $out - local.set $5 + local.get $0 + local.get $1 + call $bindings/esm/bufferFunction + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 - return + local.get $2 ) - (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) - (local $thisSize i32) - (local $otherSize i32) - (local $outSize i32) - (local $out i32) - (local $6 i32) + (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $thisSize - local.get $other - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $0 i32.store - local.get $6 - call $~lib/string/String#get:length - i32.const 1 - i32.shl - local.set $otherSize - local.get $thisSize - local.get $otherSize - i32.add - local.set $outSize - local.get $outSize - i32.const 0 - i32.eq - if - i32.const 736 - local.set $6 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $6 - return - end global.get $~lib/memory/__stack_pointer - local.get $outSize - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out + local.get $1 i32.store offset=4 - local.get $out - local.get $this - local.get $thisSize - memory.copy - local.get $out - local.get $thisSize - i32.add - local.get $other - local.get $otherSize - memory.copy - local.get $out - local.set $6 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 - return + local.get $2 ) - (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3248,30 +2958,22 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $left - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $right - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String#concat + local.get $0 + local.get $1 + call $bindings/esm/stringFunctionOptional@varargs local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunction (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3279,30 +2981,22 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $b - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String.__concat + local.get $0 + local.get $1 + call $bindings/esm/typedarrayFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunctionOptional (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3310,221 +3004,144 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store - local.get $2 - local.get $b - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - call $~lib/string/String.__concat + local.get $0 + local.get $1 + call $bindings/esm/staticarrayFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 - return ) - (func $bindings/esm/stringFunctionOptional@varargs (param $a i32) (param $b i32) (result i32) + (func $export:bindings/esm/staticarrayU16 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/staticarrayU16 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:bindings/esm/staticarrayI64 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $bindings/esm/staticarrayI64 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $0 + i32.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 64 - local.tee $b - i32.store - end - local.get $a + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/arrayFunction local.set $2 global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $2 + ) + (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store offset=4 - local.get $2 - local.get $b + local.get $0 + local.get $1 + call $bindings/esm/arrayOfStringsFunction local.set $2 global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $2 - i32.store offset=8 - local.get $2 - call $bindings/esm/stringFunctionOptional + ) + (func $export:bindings/esm/objectFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/objectFunction local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) - (local $buffer i32) - (local $4 i32) + (func $export:bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $length - i32.const 1073741820 - local.get $alignLog2 - i32.shr_u - i32.gt_u - if - i32.const 224 - i32.const 272 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - local.get $alignLog2 - i32.shl - local.tee $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store offset=8 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=12 - local.get $4 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $length - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 + local.get $0 + i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store offset=4 - local.get $2 - local.get $length - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this + local.get $0 + local.get $1 + call $bindings/esm/internrefFunction local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3532,7 +3149,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) + (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3540,272 +3157,747 @@ global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u + local.get $0 + call $bindings/esm/functionFunction local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer local.get $1 - return ) - (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) - (local $1 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store i32.const 0 - i32.store - local.get $this - local.set $1 + drop + local.get $message + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $4 i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - local.set $1 + local.get $4 + local.get $fileName + local.set $4 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) - (func $~lib/typedarray/Int16Array#__get (param $this i32) (param $index i32) (result i32) - (local $2 i32) + (func $bindings/esm/bufferFunction (param $a i32) (param $b i32) (result i32) + (local $aByteLength i32) + (local $bByteLength i32) + (local $out i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $2 + i64.const 0 + i64.store + local.get $a + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 452 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $2 + local.get $5 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $aByteLength + local.get $b + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 1 - i32.shl + local.get $5 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bByteLength + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $aByteLength + local.get $bByteLength i32.add - i32.load16_s - local.set $2 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $out + i32.store offset=4 + local.get $out + local.get $a + local.get $aByteLength + memory.copy + local.get $out + local.get $aByteLength + i32.add + local.get $b + local.get $bByteLength + memory.copy + local.get $out + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $5 return ) - (func $~lib/typedarray/Uint64Array#__set (param $this i32) (param $index i32) (param $value i64) - (local $3 i32) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index + i64.const 0 + i64.store local.get $this - local.set $3 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $6 i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 1173 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $6 i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 3 + local.get $6 + call $~lib/string/String#get:length + i32.const 1 i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize i32.add - local.get $value - i64.store + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 736 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $6 + return ) - (func $~lib/typedarray/Float32Array#__get (param $this i32) (param $index i32) (result f32) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) (local $2 i32) - (local $3 f32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this + i64.const 0 + i64.store + local.get $left local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - i32.ge_u - if - i32.const 528 - i32.const 768 - i32.const 1304 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this + local.get $right local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store offset=4 local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 2 - i32.shl - i32.add - f32.load - local.set $3 + call $~lib/string/String#concat + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $2 return ) - (func $bindings/esm/typedarrayFunction (param $a i32) (param $b i32) (result i32) - (local $out i32) - (local $i i32) - (local $i|4 i32) - (local $5 i32) + (func $bindings/esm/stringFunction (param $a i32) (param $b i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store + local.get $a + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + local.get $2 + i32.store + local.get $2 + local.get $b + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $bindings/esm/stringFunctionOptional (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $a - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 i32.store - local.get $5 - call $~lib/typedarray/Int16Array#get:length + local.get $2 local.get $b - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/typedarray/Float32Array#get:length - i32.add - call $~lib/typedarray/Uint64Array#constructor - local.tee $out + local.get $2 i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $bindings/esm/stringFunctionOptional@varargs (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $a - local.set $5 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $5 + i32.const 64 + local.tee $b i32.store - local.get $5 - call $~lib/typedarray/Int16Array#get:length - i32.lt_s - if - local.get $out - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - local.get $i - local.get $a - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=8 - local.get $5 - local.get $i - call $~lib/typedarray/Int16Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end end - i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $bindings/esm/stringFunctionOptional + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) + (local $buffer i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $length + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 224 + i32.const 272 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + local.get $alignLog2 + i32.shl + local.tee $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $length + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Int16Array#__get (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 453 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Uint64Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 1174 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Float32Array#__get (param $this i32) (param $index i32) (result f32) + (local $2 i32) + (local $3 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + i32.ge_u + if + i32.const 528 + i32.const 768 + i32.const 1305 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + f32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $bindings/esm/typedarrayFunction (param $a i32) (param $b i32) (result i32) + (local $out i32) + (local $i i32) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Int16Array#get:length + local.get $b + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Float32Array#get:length + i32.add + call $~lib/typedarray/Uint64Array#constructor + local.tee $out + i32.store offset=4 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/typedarray/Int16Array#get:length + i32.lt_s + if + local.get $out + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $i + local.get $a + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + local.get $i + call $~lib/typedarray/Int16Array#__get + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 0 local.set $i|4 loop $for-loop|1 local.get $i|4 @@ -3882,7 +3974,7 @@ if i32.const 528 i32.const 832 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -3927,7 +4019,7 @@ if i32.const 528 i32.const 832 - i32.const 93 + i32.const 95 i32.const 41 call $~lib/builtins/abort unreachable @@ -4138,7 +4230,7 @@ if i32.const 224 i32.const 896 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -4257,7 +4349,7 @@ if i32.const 528 i32.const 896 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -4391,6 +4483,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -4431,7 +4527,7 @@ if i32.const 528 i32.const 896 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -4666,7 +4762,7 @@ if i32.const 224 i32.const 896 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -4785,7 +4881,7 @@ if i32.const 528 i32.const 896 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -4815,7 +4911,7 @@ if i32.const 944 i32.const 896 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -4855,7 +4951,7 @@ if i32.const 528 i32.const 896 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -4893,6 +4989,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -5240,160 +5340,40 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:a - i32.add - call $bindings/esm/PlainObject#set:a - local.get $ref - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $a - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:b - local.get $b - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $3 - call $bindings/esm/PlainObject#get:b - i32.add - call $bindings/esm/PlainObject#set:b - local.get $ref - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:length_ - i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - local.get $this - local.set $5 + local.get $3 + call $bindings/esm/PlainObject#get:a + i32.add + call $bindings/esm/PlainObject#set:a + local.get $ref + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $3 + i32.store offset=4 + local.get $3 + local.get $a + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=8 + local.get $3 + call $bindings/esm/PlainObject#get:b + local.get $b + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $bindings/esm/PlainObject#get:b + i32.add + call $bindings/esm/PlainObject#set:b + local.get $ref + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $3 + return ) (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) (local $buffer i32) @@ -5456,7 +5436,7 @@ if i32.const 224 i32.const 832 - i32.const 51 + i32.const 53 i32.const 60 call $~lib/builtins/abort unreachable @@ -5540,268 +5520,342 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $export:bindings/esm/bufferFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 528 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 944 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1072 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1136 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $bindings/esm/stringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $bindings/esm/mutableStringGlobal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=4 + call $~lib/object/Object~visit local.get $0 + i32.load local.get $1 - call $bindings/esm/bufferFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 + call $~lib/rt/itcms/__visit ) - (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $bindings/esm/PlainObject~visit (param $0 i32) (param $1 i32) (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=4 + call $~lib/object/Object~visit local.get $0 + i32.load offset=56 local.get $1 - call $bindings/esm/stringFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=60 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=64 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $bindings/esm/NonPlainObject + block $~lib/typedarray/Uint8Array + block $bindings/esm/PlainObject + block $~lib/array/Array<~lib/string/String> + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Int16Array + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/typedarray/Int16Array $~lib/typedarray/Float32Array $~lib/typedarray/Uint64Array $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array<~lib/string/String> $bindings/esm/PlainObject $~lib/typedarray/Uint8Array $bindings/esm/NonPlainObject $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $bindings/esm/PlainObject~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + return + end + unreachable ) - (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/stringFunctionOptional@varargs + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - ) - (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/typedarrayFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 ) - (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/staticarrayFunction + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - ) - (func $export:bindings/esm/staticarrayU16 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 i32.store - local.get $0 - call $bindings/esm/staticarrayU16 - local.set $1 + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) - (func $export:bindings/esm/staticarrayI64 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $bindings/esm/staticarrayI64 - local.set $1 + (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/arrayFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/arrayOfStringsFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/objectFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/objectFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/internrefFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/internrefFunction - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:length_ + i32.const 2 + i32.shl i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $export:bindings/esm/functionFunction (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $5 i32.store - local.get $0 - call $bindings/esm/functionFunction - local.set $1 + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/bindings/raw.release.js b/tests/compiler/bindings/raw.release.js index 564035a225..5ecef61fe5 100644 --- a/tests/compiler/bindings/raw.release.js +++ b/tests/compiler/bindings/raw.release.js @@ -34,7 +34,7 @@ export async function instantiate(module, imports = {}) { })(); }, abort(message, fileName, lineNumber, columnNumber) { - // ~lib/builtins/abort(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void + // ~lib/builtins/__abort_impl(~lib/string/String | null?, ~lib/string/String | null?, u32?, u32?) => void message = __liftString(message >>> 0); fileName = __liftString(fileName >>> 0); lineNumber = lineNumber >>> 0; diff --git a/tests/compiler/bindings/raw.release.wat b/tests/compiler/bindings/raw.release.wat index 6d66004d1a..26f77f94c2 100644 --- a/tests/compiler/bindings/raw.release.wat +++ b/tests/compiler/bindings/raw.release.wat @@ -6,15 +6,15 @@ (type $4 (func (result i32))) (type $5 (func)) (type $6 (func (param i32 i32))) - (type $7 (func (param i32 i32 i64))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64))) (type $9 (func (param i32 i32 f64 f64 f64 f64 f64))) (type $10 (func (param f64) (result f64))) (type $11 (func (param i64 i64) (result i64))) (type $12 (func (result i64))) (import "env" "Math.E" (global $~lib/bindings/dom/Math.E f64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "console.log" (func $~lib/bindings/dom/console.log (param i32))) (import "env" "Math.log" (func $~lib/bindings/dom/Math.log (param f64) (result f64))) (import "env" "Date.getTimezoneOffset" (func $bindings/esm/Date_getTimezoneOffset (result i32))) @@ -120,6 +120,41 @@ (export "objectFunction" (func $export:bindings/esm/objectFunction)) (export "internrefFunction" (func $export:bindings/esm/internrefFunction)) (export "functionFunction" (func $export:bindings/esm/staticarrayU16)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + if + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -848,7 +883,7 @@ if i32.const 1552 i32.const 1616 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1579,7 +1614,7 @@ if i32.const 1552 i32.const 1792 - i32.const 1173 + i32.const 1174 i32.const 64 call $~lib/builtins/abort unreachable @@ -1664,7 +1699,7 @@ if i32.const 1552 i32.const 1856 - i32.const 93 + i32.const 95 i32.const 41 call $~lib/builtins/abort unreachable @@ -1717,7 +1752,7 @@ if i32.const 1552 i32.const 1856 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -2163,7 +2198,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$270 + block $__inlined_func$~lib/rt/itcms/__renew$264 i32.const 1073741820 local.get $2 i32.const 1 @@ -2206,7 +2241,7 @@ i32.store offset=16 local.get $2 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$270 + br $__inlined_func$~lib/rt/itcms/__renew$264 end local.get $3 local.get $4 @@ -2282,7 +2317,7 @@ if i32.const 1552 i32.const 1920 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2349,7 +2384,7 @@ if i32.const 1552 i32.const 1920 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2372,7 +2407,7 @@ if i32.const 1968 i32.const 1920 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -2417,7 +2452,7 @@ if i32.const 1552 i32.const 1920 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2480,7 +2515,7 @@ if i32.const 1552 i32.const 1920 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2563,7 +2598,7 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store - block $__inlined_func$~lib/string/String#concat$285 + block $__inlined_func$~lib/string/String#concat$287 local.get $1 i32.const 20 i32.sub @@ -2582,7 +2617,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1760 local.set $2 - br $__inlined_func$~lib/string/String#concat$285 + br $__inlined_func$~lib/string/String#concat$287 end global.get $~lib/memory/__stack_pointer local.get $2 @@ -2828,36 +2863,13 @@ global.set $~lib/rt/itcms/threshold ) (func $export:bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - if - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/typedarrayFunction - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f32) + (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -2887,261 +2899,593 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - i32.const 1088 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 1088 - i32.store - end + global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=4 + i32.store + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.set $4 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=8 - local.get $0 + local.tee $2 + i32.store local.get $1 - call $bindings/esm/stringFunction - global.get $~lib/memory/__stack_pointer - i32.const 12 + call $~lib/typedarray/Float32Array#get:length + local.get $4 i32.add - global.set $~lib/memory/__stack_pointer + local.set $6 global.get $~lib/memory/__stack_pointer i32.const 8 - i32.add + i32.sub global.set $~lib/memory/__stack_pointer - return - end - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - ) - (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - if - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $0 - local.get $1 - call $bindings/esm/stringFunction - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner1 global.get $~lib/memory/__stack_pointer i32.const 2276 i32.lt_s - br_if $folding-inner1 + br_if $folding-inner0 global.get $~lib/memory/__stack_pointer - local.get $0 + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 - block $__inlined_func$bindings/esm/staticarrayFunction$1 (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $1 + i32.eqz + if global.get $~lib/memory/__stack_pointer i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.add - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1248 - i32.const 1856 - i32.const 51 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 2 - i32.shl - i32.const 8 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - loop $for-loop|0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $2 - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 - local.get $4 - local.get $2 - local.get $0 - local.get $2 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 - end + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $6 + i32.const 134217727 + i32.gt_u + if + i32.const 1248 + i32.const 1296 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.const 3 + i32.shl + local.tee $8 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $1 + local.get $6 + i32.store + local.get $1 + local.get $6 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $3 + local.get $0 + i32.load offset=8 + i32.const 1 + i32.shr_u + i32.ge_u + if + i32.const 1552 + i32.const 1792 + i32.const 453 + i32.const 64 + call $~lib/builtins/abort + unreachable end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $3 + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + local.get $4 + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $3 + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/typedarray/Float32Array#get:length + local.get $3 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + call $~lib/typedarray/Int16Array#get:length + local.get $3 + i32.add + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $2 - loop $for-loop|1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $2 - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 - local.get $2 - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - i32.add - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $4 - local.get $3 - local.get $1 - local.get $2 - call $~lib/staticarray/StaticArray#__get - call $~lib/staticarray/StaticArray#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|1 - end + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $3 + local.get $2 + i32.load offset=8 + i32.const 2 + i32.shr_u + i32.ge_u + if + i32.const 1552 + i32.const 1792 + i32.const 1305 + i32.const 64 + call $~lib/builtins/abort + unreachable end global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.get $3 + i32.const 2 + i32.shl + i32.add + f32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 local.get $4 - br $__inlined_func$bindings/esm/staticarrayFunction$1 + local.get $5 + i64.trunc_sat_f32_u + call $~lib/typedarray/Uint64Array#__set + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 end - br $folding-inner1 end global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $export:bindings/esm/stringFunctionOptional@varargs (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + i32.const 1088 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 1088 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $export:bindings/esm/stringFunction (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + if + i32.const 35072 + i32.const 35120 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $bindings/esm/stringFunction + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $export:bindings/esm/staticarrayFunction (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.add + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $4 + i32.const 268435455 + i32.gt_u + if + i32.const 1248 + i32.const 1856 + i32.const 53 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + i32.shl + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $4 + local.get $2 + local.get $0 + local.get $2 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + i32.const 0 + local.set $2 + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $2 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + i32.add + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $4 + local.get $3 + local.get $1 + local.get $2 + call $~lib/staticarray/StaticArray#__get + call $~lib/staticarray/StaticArray#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $4 return end i32.const 35072 @@ -3184,7 +3528,7 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - block $__inlined_func$bindings/esm/PlainObject#constructor$4 (result i32) + block $__inlined_func$bindings/esm/PlainObject#constructor$2 (result i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -3347,7 +3691,7 @@ i32.add global.set $~lib/memory/__stack_pointer local.get $2 - br $__inlined_func$bindings/esm/PlainObject#constructor$4 + br $__inlined_func$bindings/esm/PlainObject#constructor$2 end br $folding-inner1 end @@ -3529,263 +3873,9 @@ i32.add local.get $1 local.get $4 - memory.copy - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - return - end - i32.const 35072 - i32.const 35120 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - ) - (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - call $~lib/array/Array#get:length - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length - local.get $4 - i32.add - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 12 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store - local.get $5 - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 0 - i32.store offset=12 - local.get $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1248 - i32.const 1920 - i32.const 70 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 8 - local.get $4 - local.get $4 - i32.const 8 - i32.le_u - select - i32.const 2 - i32.shl - local.tee $6 - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $3 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=12 - local.get $5 - local.get $3 - i32.store - local.get $5 - local.get $3 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $3 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $6 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $4 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - loop $for-loop|0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $~lib/array/Array#get:length - local.get $2 - i32.gt_s - if - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=12 - local.get $0 - local.get $2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=8 - local.get $5 - local.get $2 - local.get $3 - call $~lib/array/Array<~lib/string/String>#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|0 - end - end - i32.const 0 - local.set $2 - loop $for-loop|1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length - local.get $2 - i32.gt_s - if - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=12 - local.get $0 - call $~lib/array/Array#get:length - local.get $2 - i32.add - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=12 - local.get $1 - local.get $2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=8 - local.get $5 - local.get $3 - local.get $4 - call $~lib/array/Array<~lib/string/String>#__set - local.get $2 - i32.const 1 - i32.add - local.set $2 - br $for-loop|1 - end - end + memory.copy global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3802,7 +3892,7 @@ call $~lib/builtins/abort unreachable ) - (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $export:bindings/esm/arrayOfStringsFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3824,7 +3914,7 @@ local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3835,8 +3925,8 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 global.get $~lib/memory/__stack_pointer local.get $0 i32.store @@ -3851,7 +3941,7 @@ call $~lib/array/Array#get:length local.get $4 i32.add - local.set $5 + local.set $4 global.get $~lib/memory/__stack_pointer i32.const 16 i32.sub @@ -3868,99 +3958,99 @@ i64.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 16 - i32.const 11 + i32.const 12 call $~lib/rt/itcms/__new - local.tee $6 + local.tee $5 i32.store global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store - local.get $6 + local.get $5 i32.const 0 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 + local.get $5 i32.const 0 i32.store offset=12 - local.get $5 + local.get $4 i32.const 268435455 i32.gt_u if i32.const 1248 i32.const 1920 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 8 - local.get $5 - local.get $5 + local.get $4 + local.get $4 i32.const 8 i32.le_u select i32.const 2 i32.shl - local.tee $3 + local.tee $6 i32.const 1 call $~lib/rt/itcms/__new - local.tee $4 + local.tee $3 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $3 i32.store offset=12 - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.store - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 - local.get $4 + local.get $5 + local.get $3 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 + local.get $5 local.get $6 - local.get $3 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 - local.get $6 local.get $5 + local.get $4 i32.store offset=12 global.get $~lib/memory/__stack_pointer i32.const 16 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store offset=4 loop $for-loop|0 global.get $~lib/memory/__stack_pointer @@ -3972,17 +4062,22 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=8 - local.get $6 - local.get $2 + i32.store offset=12 local.get $0 local.get $2 - call $~lib/array/Array#__get - call $~lib/array/Array#__set + call $~lib/array/Array<~lib/string/String>#__get + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $5 + local.get $2 + local.get $3 + call $~lib/array/Array<~lib/string/String>#__set local.get $2 i32.const 1 i32.add @@ -4002,11 +4097,11 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $5 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=8 + i32.store offset=12 local.get $0 call $~lib/array/Array#get:length local.get $2 @@ -4014,13 +4109,18 @@ local.set $3 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=8 - local.get $6 - local.get $3 + i32.store offset=12 local.get $1 local.get $2 - call $~lib/array/Array#__get - call $~lib/array/Array#__set + call $~lib/array/Array<~lib/string/String>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $5 + local.get $3 + local.get $4 + call $~lib/array/Array<~lib/string/String>#__set local.get $2 i32.const 1 i32.add @@ -4029,14 +4129,14 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $5 return end i32.const 35072 @@ -4046,15 +4146,14 @@ call $~lib/builtins/abort unreachable ) - (func $bindings/esm/typedarrayFunction (param $0 i32) (param $1 i32) (result i32) + (func $export:bindings/esm/arrayFunction (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 f32) + (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner1 @@ -4063,304 +4162,213 @@ i32.lt_s br_if $folding-inner1 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer local.get $0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.set $5 - global.get $~lib/memory/__stack_pointer local.get $1 - i32.store - block $__inlined_func$~lib/typedarray/Uint64Array#constructor (result i32) - local.get $1 - call $~lib/typedarray/Float32Array#get:length - local.get $5 - i32.add - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner00 - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner00 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner00 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $2 - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $2 - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store - local.get $2 - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.store offset=8 - local.get $5 - i32.const 134217727 - i32.gt_u - if - i32.const 1248 - i32.const 1296 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.const 3 - i32.shl - local.tee $7 - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=12 - local.get $2 - local.get $5 - i32.store - local.get $2 - local.get $5 - i32.const 0 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $5 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $7 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - br $__inlined_func$~lib/typedarray/Uint64Array#constructor - end - br $folding-inner1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/array/Array#get:length + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length + local.get $4 + i32.add + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2276 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store + local.get $6 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 268435455 + i32.gt_u + if + i32.const 1248 + i32.const 1920 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable end - local.tee $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $5 + local.get $5 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $6 + local.get $4 + i32.store + local.get $6 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 i32.store offset=4 loop $for-loop|0 global.get $~lib/memory/__stack_pointer local.get $0 i32.store local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $6 i32.store global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $3 - local.get $0 - i32.load offset=8 - i32.const 1 - i32.shr_u - i32.ge_u - if - i32.const 1552 - i32.const 1792 - i32.const 452 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store + local.get $6 + local.get $2 local.get $0 - i32.load offset=4 - local.get $3 - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - local.get $3 - local.get $5 - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set - local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|0 end end i32.const 0 - local.set $3 + local.set $2 loop $for-loop|1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store local.get $1 - call $~lib/typedarray/Float32Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $6 i32.store global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=8 local.get $0 - call $~lib/typedarray/Int16Array#get:length - local.get $3 + call $~lib/array/Array#get:length + local.get $2 i32.add - local.set $5 + local.set $3 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 2276 - i32.lt_s - br_if $folding-inner1 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store + local.get $6 local.get $3 local.get $1 - i32.load offset=8 - i32.const 2 - i32.shr_u - i32.ge_u - if - i32.const 1552 - i32.const 1792 - i32.const 1304 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - i32.load offset=4 - local.get $3 - i32.const 2 - i32.shl - i32.add - f32.load - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer local.get $2 - local.get $5 - local.get $4 - i64.trunc_sat_f32_u - call $~lib/typedarray/Uint64Array#__set - local.get $3 + call $~lib/array/Array#__get + call $~lib/array/Array#__set + local.get $2 i32.const 1 i32.add - local.set $3 + local.set $2 br $for-loop|1 end end @@ -4368,7 +4376,11 @@ i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 return end i32.const 35072 diff --git a/tests/compiler/bool.debug.wat b/tests/compiler/bool.debug.wat index 35346823bc..a6bb7ccd47 100644 --- a/tests/compiler/bool.debug.wat +++ b/tests/compiler/bool.debug.wat @@ -1,8 +1,9 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $bool/i (mut i32) (i32.const 2)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $bool/I (mut i64) (i64.const 2)) (global $bool/u (mut i32) (i32.const 2)) (global $bool/U (mut i64) (i64.const 2)) @@ -763,4 +764,49 @@ (func $~start call $start:bool ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/builtins.debug.wat b/tests/compiler/builtins.debug.wat index fd74409ab4..76d15e6209 100644 --- a/tests/compiler/builtins.debug.wat +++ b/tests/compiler/builtins.debug.wat @@ -6,11 +6,12 @@ (type $4 (func (param i32 i32 i32 i32))) (type $5 (func (param i32 i32 i32 i32 i32) (result i32))) (type $6 (func (param i32 i32 f64 f64 f64 f64 f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (global $builtins/b (mut i32) (i32.const 0)) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/l (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $builtins/v (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) (global $builtins/f (mut f32) (f32.const 0)) @@ -26,6 +27,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i8.MIN_VALUE i32 (i32.const -128)) (global $~lib/builtins/i8.MAX_VALUE i32 (i32.const 127)) @@ -397,6 +399,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) diff --git a/tests/compiler/builtins.release.wat b/tests/compiler/builtins.release.wat index 856132d52c..7717c0d6bd 100644 --- a/tests/compiler/builtins.release.wat +++ b/tests/compiler/builtins.release.wat @@ -1,10 +1,10 @@ (module (type $0 (func (param i32 i32) (result i32))) - (type $1 (func)) - (type $2 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func)) (type $3 (func (param i32 i32 f64 f64 f64 f64 f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $builtins/i (mut i32) (i32.const 0)) (global $builtins/I (mut i64) (i64.const 0)) (global $builtins/f (mut f32) (f32.const 0)) @@ -70,6 +70,41 @@ (export "test" (func $start:builtins~anonymous|1)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2028 + i32.lt_s + if + i32.const 34816 + i32.const 34864 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -183,7 +218,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$2 + block $__inlined_func$~lib/util/string/compareImpl$3 loop $while-continue|1 local.get $0 local.tee $3 @@ -203,7 +238,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$2 + br_if $__inlined_func$~lib/util/string/compareImpl$3 local.get $2 i32.const 2 i32.add diff --git a/tests/compiler/call-inferred.debug.wat b/tests/compiler/call-inferred.debug.wat index 1d07f41be0..09fda345ba 100644 --- a/tests/compiler/call-inferred.debug.wat +++ b/tests/compiler/call-inferred.debug.wat @@ -5,12 +5,13 @@ (type $3 (func (param i32 i32) (result i32))) (type $4 (func)) (type $5 (func (param f32) (result f32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param f64) (result f64))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -23,6 +24,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -259,7 +261,7 @@ if i32.const 288 i32.const 352 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2298,61 +2300,6 @@ local.get $a return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 288 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 96 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $call-inferred/Baz - block $call-inferred/Bar - block $call-inferred/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $call-inferred/Foo $call-inferred/Bar $call-inferred/Baz $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:call-inferred ) @@ -2369,6 +2316,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $call-inferred/Foo#constructor (param $this i32) (param $value i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2675,4 +2654,59 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 288 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 96 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $call-inferred/Baz + block $call-inferred/Bar + block $call-inferred/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $call-inferred/Foo $call-inferred/Bar $call-inferred/Baz $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/call-inferred.release.wat b/tests/compiler/call-inferred.release.wat index 07fa104b08..18f9c33b29 100644 --- a/tests/compiler/call-inferred.release.wat +++ b/tests/compiler/call-inferred.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -35,6 +35,41 @@ (data $9 (i32.const 1504) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1536 + i32.lt_s + if + i32.const 34336 + i32.const 34384 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -73,7 +108,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$125 + block $__inlined_func$~lib/rt/itcms/Object#unlink$126 local.get $1 i32.load offset=4 i32.const -4 @@ -97,7 +132,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$125 + br $__inlined_func$~lib/rt/itcms/Object#unlink$126 end local.get $1 i32.load offset=8 @@ -140,7 +175,7 @@ if i32.const 1312 i32.const 1376 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/call-optional.debug.wat b/tests/compiler/call-optional.debug.wat index 7a6794eba7..1b0a910bab 100644 --- a/tests/compiler/call-optional.debug.wat +++ b/tests/compiler/call-optional.debug.wat @@ -2,8 +2,9 @@ (type $0 (func (param i32 i32 i32) (result i32))) (type $1 (func)) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $call-optional/optIndirect (mut i32) (i32.const 96)) (global $~lib/memory/__data_end i32 (i32.const 108)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32876)) @@ -157,4 +158,49 @@ (func $~start call $start:call-optional ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32896 + i32.const 32944 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/call-optional.release.wat b/tests/compiler/call-optional.release.wat index 7f53c6549f..7ef2146ca8 100644 --- a/tests/compiler/call-optional.release.wat +++ b/tests/compiler/call-optional.release.wat @@ -1,9 +1,11 @@ (module (type $0 (func (param i32 i32 i32) (result i32))) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33900)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") @@ -13,6 +15,40 @@ (elem $0 (i32.const 1) $call-optional/opt@varargs) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1132 + i32.lt_s + if + i32.const 33920 + i32.const 33968 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start i32.const 1 global.set $~argumentsLength @@ -30,7 +66,6 @@ i32.const 0 i32.const 1056 i32.const 9 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -48,7 +83,6 @@ i32.const 0 i32.const 1056 i32.const 10 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -66,7 +100,6 @@ i32.const 0 i32.const 1056 i32.const 11 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/call-rest.debug.wat b/tests/compiler/call-rest.debug.wat index 4bedb4c4ec..02cd5c1b7c 100644 --- a/tests/compiler/call-rest.debug.wat +++ b/tests/compiler/call-rest.debug.wat @@ -6,14 +6,16 @@ (type $4 (func (param i32 i32) (result i32))) (type $5 (func)) (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32) (result i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -26,8 +28,8 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) - (global $call-rest/indirect (mut i32) (i32.const 624)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $call-rest/indirect (mut i32) (i32.const 624)) (global $~lib/rt/__rtti_base i32 (i32.const 1072)) (global $~lib/memory/__data_end i32 (i32.const 1112)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33880)) @@ -256,7 +258,7 @@ if i32.const 32 i32.const 368 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2440,147 +2442,6 @@ local.get $this i32.load offset=12 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 720 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 176 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>#__visit - ) - (func $call-rest/Foo~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:dataStart (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array<~lib/string/String> - block $call-rest/Foo - block $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32> $call-rest/Foo $~lib/array/Array<~lib/string/String> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $call-rest/Foo~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - unreachable - ) (func $~start call $start:call-rest ) @@ -2622,6 +2483,38 @@ local.get $1 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) (local $value i32) (local $3 i32) @@ -2645,7 +2538,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2888,6 +2781,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -2928,7 +2825,7 @@ if i32.const 32 i32.const 96 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3813,6 +3710,204 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 720 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 176 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>#__visit + ) + (func $call-rest/Foo~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array<~lib/string/String> + block $call-rest/Foo + block $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32> $call-rest/Foo $~lib/array/Array<~lib/string/String> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32?%2C...~lib/array/Array%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $call-rest/Foo~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -3823,6 +3918,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3849,6 +3948,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3875,6 +3978,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -3902,6 +4009,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -3959,57 +4070,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) ) diff --git a/tests/compiler/call-rest.release.wat b/tests/compiler/call-rest.release.wat index 418eed48ad..34520f2758 100644 --- a/tests/compiler/call-rest.release.wat +++ b/tests/compiler/call-rest.release.wat @@ -9,7 +9,7 @@ (type $7 (func (param i32 i32 i64))) (type $8 (func (param i32 i32 i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -77,6 +77,41 @@ (elem $0 (i32.const 1) $call-rest/fn@varargs) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2136 + i32.lt_s + if + i32.const 34928 + i32.const 34976 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -1071,7 +1106,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$160 + block $__inlined_func$~lib/rt/itcms/Object#unlink$161 local.get $0 i32.load offset=4 i32.const -4 @@ -1095,7 +1130,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$160 + br $__inlined_func$~lib/rt/itcms/Object#unlink$161 end local.get $0 i32.load offset=8 @@ -1138,7 +1173,7 @@ if i32.const 1056 i32.const 1392 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1344,7 +1379,7 @@ if i32.const 1056 i32.const 1120 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2046,7 +2081,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$154 + block $__inlined_func$~lib/rt/itcms/__renew$145 i32.const 1073741820 local.get $2 i32.const 1 @@ -2089,7 +2124,7 @@ i32.store offset=16 local.get $2 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$154 + br $__inlined_func$~lib/rt/itcms/__renew$145 end local.get $3 local.get $4 @@ -2194,7 +2229,7 @@ if i32.const 1056 i32.const 1120 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/call-super.debug.wat b/tests/compiler/call-super.debug.wat index 9e413d5a8e..31880fbec2 100644 --- a/tests/compiler/call-super.debug.wat +++ b/tests/compiler/call-super.debug.wat @@ -4,11 +4,12 @@ (type $2 (func)) (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -229,7 +231,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2359,82 +2361,6 @@ call $call-super/test4 call $call-super/test5 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $call-super/I - block $call-super/J - block $call-super/G - block $call-super/H - block $call-super/E - block $call-super/F - block $call-super/C - block $call-super/D - block $call-super/A - block $call-super/B - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $call-super/B $call-super/A $call-super/D $call-super/C $call-super/F $call-super/E $call-super/H $call-super/G $call-super/J $call-super/I $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:call-super ) @@ -2451,6 +2377,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $call-super/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3302,4 +3260,80 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $call-super/I + block $call-super/J + block $call-super/G + block $call-super/H + block $call-super/E + block $call-super/F + block $call-super/C + block $call-super/D + block $call-super/A + block $call-super/B + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $call-super/B $call-super/A $call-super/D $call-super/C $call-super/F $call-super/E $call-super/H $call-super/G $call-super/J $call-super/I $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/call-super.release.wat b/tests/compiler/call-super.release.wat index 003836b8dc..edfdb815e0 100644 --- a/tests/compiler/call-super.release.wat +++ b/tests/compiler/call-super.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32) (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (param i32) (result i32))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -35,6 +35,41 @@ (data $9 (i32.const 1488) "\0e\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1548 + i32.lt_s + if + i32.const 34336 + i32.const 34384 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -387,7 +422,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$158 + block $__inlined_func$~lib/rt/itcms/Object#unlink$159 local.get $1 i32.load offset=4 i32.const -4 @@ -411,7 +446,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$158 + br $__inlined_func$~lib/rt/itcms/Object#unlink$159 end local.get $1 i32.load offset=8 @@ -454,7 +489,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/class-extends.debug.wat b/tests/compiler/class-extends.debug.wat index db6c27269e..59b902065f 100644 --- a/tests/compiler/class-extends.debug.wat +++ b/tests/compiler/class-extends.debug.wat @@ -1,13 +1,14 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) (type $4 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__data_end i32 (i32.const 8)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 0) (table $0 1 1 funcref) (elem $0 (i32.const 1)) @@ -44,6 +45,22 @@ unreachable end ) + (func $export:class-extends/test (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $class-extends/test + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $class-extends/test (param $b i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -91,19 +108,35 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $export:class-extends/test (param $0 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 i32.store - local.get $0 - call $class-extends/test + local.get $4 + local.get $fileName + local.set $4 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer ) diff --git a/tests/compiler/class-extends.release.wat b/tests/compiler/class-extends.release.wat index 5ff350f382..5e4539ee2f 100644 --- a/tests/compiler/class-extends.release.wat +++ b/tests/compiler/class-extends.release.wat @@ -1,74 +1,91 @@ (module - (type $0 (func (param i32 i32 i32 i32))) - (type $1 (func (param i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33792)) (memory $0 0) (export "memory" (memory $0)) (export "test" (func $export:class-extends/test)) - (func $export:class-extends/test (param $0 i32) + (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 1024 - i32.lt_s - br_if $folding-inner0 + i32.const 1024 + i32.lt_s + if global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 1024 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - i32.load - drop - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - i32.load16_s offset=4 - drop - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - i32.const 2 - i32.store + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 33824 i32.store - local.get $0 - i32.const 3 - i32.store16 offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.const 33872 + i32.store offset=4 + i32.const 33824 + i32.const 33872 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - return + unreachable end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable + ) + (func $export:class-extends/test (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load16_s offset=4 + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 3 + i32.store16 offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer ) ) diff --git a/tests/compiler/class-implements.debug.wat b/tests/compiler/class-implements.debug.wat index a7eac9aaaf..56c1cd304b 100644 --- a/tests/compiler/class-implements.debug.wat +++ b/tests/compiler/class-implements.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -232,7 +234,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2636,152 +2638,6 @@ local.get $0 call $class-implements/B2#get:foo ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $class-implements/a - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/c - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/d - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/e - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/f - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/g - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-implements/h - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $class-implements/B4 - block $class-implements/B3 - block $class-implements/B2 - block $class-implements/A4 - block $class-implements/A3 - block $class-implements/I2 - block $class-implements/A2 - block $class-implements/K - block $class-implements/G - block $class-implements/F - block $class-implements/E - block $class-implements/J - block $class-implements/D - block $class-implements/B - block $class-implements/C - block $class-implements/I - block $class-implements/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-implements/A $class-implements/I $class-implements/C $class-implements/B $class-implements/D $class-implements/J $class-implements/E $class-implements/F $class-implements/G $class-implements/K $class-implements/A2 $class-implements/I2 $class-implements/A3 $class-implements/A4 $class-implements/B2 $class-implements/B3 $class-implements/B4 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:class-implements ) @@ -2798,6 +2654,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $class-implements/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -4227,4 +4115,150 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $class-implements/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/d + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/e + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/f + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/g + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-implements/h + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $class-implements/B4 + block $class-implements/B3 + block $class-implements/B2 + block $class-implements/A4 + block $class-implements/A3 + block $class-implements/I2 + block $class-implements/A2 + block $class-implements/K + block $class-implements/G + block $class-implements/F + block $class-implements/E + block $class-implements/J + block $class-implements/D + block $class-implements/B + block $class-implements/C + block $class-implements/I + block $class-implements/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-implements/A $class-implements/I $class-implements/C $class-implements/B $class-implements/D $class-implements/J $class-implements/E $class-implements/F $class-implements/G $class-implements/K $class-implements/A2 $class-implements/I2 $class-implements/A3 $class-implements/A4 $class-implements/B2 $class-implements/B3 $class-implements/B4 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/class-implements.release.wat b/tests/compiler/class-implements.release.wat index 54da044a10..9f86ba75ec 100644 --- a/tests/compiler/class-implements.release.wat +++ b/tests/compiler/class-implements.release.wat @@ -2,12 +2,12 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32))) - (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32))) + (type $6 (func (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -42,6 +42,41 @@ (data $9 (i32.const 1504) "\15\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1592 + i32.lt_s + if + i32.const 34384 + i32.const 34432 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -435,7 +470,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$174 + block $__inlined_func$~lib/rt/itcms/Object#unlink$175 local.get $1 i32.load offset=4 i32.const -4 @@ -459,7 +494,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$174 + br $__inlined_func$~lib/rt/itcms/Object#unlink$175 end local.get $1 i32.load offset=8 @@ -502,7 +537,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/class-overloading-cast.debug.wat b/tests/compiler/class-overloading-cast.debug.wat index c108e6d09e..3f38fc1758 100644 --- a/tests/compiler/class-overloading-cast.debug.wat +++ b/tests/compiler/class-overloading-cast.debug.wat @@ -5,13 +5,14 @@ (type $3 (func (param i32))) (type $4 (func)) (type $5 (func (param i32 f64) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) (type $11 (func (param i32 f32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -23,6 +24,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -238,7 +240,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2472,110 +2474,6 @@ local.get $1 call $class-overloading-cast/A<~lib/string/String>#foo ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $class-overloading-cast/v - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading-cast/v2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading-cast/v3 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading-cast/c - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $class-overloading-cast/A - block $"class-overloading-cast/B" - block $class-overloading-cast/D - block $class-overloading-cast/A<~lib/string/String> - block $class-overloading-cast/C - block $class-overloading-cast/A - block $"class-overloading-cast/B" - block $"class-overloading-cast/B" - block $class-overloading-cast/A - block $"class-overloading-cast/B" - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"class-overloading-cast/B" $class-overloading-cast/A $"class-overloading-cast/B" $"class-overloading-cast/B" $class-overloading-cast/A $class-overloading-cast/C $class-overloading-cast/A<~lib/string/String> $class-overloading-cast/D $"class-overloading-cast/B" $class-overloading-cast/A $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start global.get $~started if @@ -2598,6 +2496,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $class-overloading-cast/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3291,4 +3221,108 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $class-overloading-cast/v + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading-cast/v2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading-cast/v3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading-cast/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $class-overloading-cast/A + block $"class-overloading-cast/B" + block $class-overloading-cast/D + block $class-overloading-cast/A<~lib/string/String> + block $class-overloading-cast/C + block $class-overloading-cast/A + block $"class-overloading-cast/B" + block $"class-overloading-cast/B" + block $class-overloading-cast/A + block $"class-overloading-cast/B" + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"class-overloading-cast/B" $class-overloading-cast/A $"class-overloading-cast/B" $"class-overloading-cast/B" $class-overloading-cast/A $class-overloading-cast/C $class-overloading-cast/A<~lib/string/String> $class-overloading-cast/D $"class-overloading-cast/B" $class-overloading-cast/A $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/class-overloading-cast.release.wat b/tests/compiler/class-overloading-cast.release.wat index a06c23f70d..b8b21990f3 100644 --- a/tests/compiler/class-overloading-cast.release.wat +++ b/tests/compiler/class-overloading-cast.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -48,6 +48,41 @@ (data $13 (i32.const 1648) "\0e\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1708 + i32.lt_s + if + i32.const 34496 + i32.const 34544 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -316,7 +351,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$141 + block $__inlined_func$~lib/rt/itcms/Object#unlink$142 local.get $1 i32.load offset=4 i32.const -4 @@ -340,7 +375,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$141 + br $__inlined_func$~lib/rt/itcms/Object#unlink$142 end local.get $1 i32.load offset=8 @@ -383,7 +418,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/class-overloading.debug.wat b/tests/compiler/class-overloading.debug.wat index 7cdea8bbb4..ca9f7362f8 100644 --- a/tests/compiler/class-overloading.debug.wat +++ b/tests/compiler/class-overloading.debug.wat @@ -4,13 +4,14 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $class-overloading/which (mut i32) (i32.const 32)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,6 +23,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -242,7 +244,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2756,136 +2758,6 @@ local.get $0 call $class-overloading/A1#baz ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $class-overloading/which - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading/a - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading/c - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading/ia - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading/ic - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $class-overloading/b2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $class-overloading/A1 - block $class-overloading/B1 - block $class-overloading/B2 - block $class-overloading/A2 - block $class-overloading/CC - block $class-overloading/IC - block $class-overloading/CA - block $class-overloading/IA - block $class-overloading/F - block $class-overloading/E - block $class-overloading/D - block $class-overloading/C - block $class-overloading/B - block $class-overloading/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-overloading/A $class-overloading/B $class-overloading/C $class-overloading/D $class-overloading/E $class-overloading/F $class-overloading/IA $class-overloading/CA $class-overloading/IC $class-overloading/CC $class-overloading/A2 $class-overloading/B2 $class-overloading/B1 $class-overloading/A1 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start global.get $~started if @@ -2908,6 +2780,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $class-overloading/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -4239,4 +4143,134 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $class-overloading/which + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading/ia + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading/ic + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $class-overloading/b2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $class-overloading/A1 + block $class-overloading/B1 + block $class-overloading/B2 + block $class-overloading/A2 + block $class-overloading/CC + block $class-overloading/IC + block $class-overloading/CA + block $class-overloading/IA + block $class-overloading/F + block $class-overloading/E + block $class-overloading/D + block $class-overloading/C + block $class-overloading/B + block $class-overloading/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-overloading/A $class-overloading/B $class-overloading/C $class-overloading/D $class-overloading/E $class-overloading/F $class-overloading/IA $class-overloading/CA $class-overloading/IC $class-overloading/CC $class-overloading/A2 $class-overloading/B2 $class-overloading/B1 $class-overloading/A1 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/class-overloading.release.wat b/tests/compiler/class-overloading.release.wat index 5552f940ac..063e9dfc9a 100644 --- a/tests/compiler/class-overloading.release.wat +++ b/tests/compiler/class-overloading.release.wat @@ -2,12 +2,12 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32))) (type $2 (func)) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $class-overloading/which (mut i32) (i32.const 1056)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -58,6 +58,41 @@ (data $17 (i32.const 1792) "\12\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1868 + i32.lt_s + if + i32.const 34656 + i32.const 34704 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -488,7 +523,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$171 + block $__inlined_func$~lib/rt/itcms/Object#unlink$172 local.get $1 i32.load offset=4 i32.const -4 @@ -512,7 +547,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$171 + br $__inlined_func$~lib/rt/itcms/Object#unlink$172 end local.get $1 i32.load offset=8 @@ -555,7 +590,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/class-override.debug.wat b/tests/compiler/class-override.debug.wat index 7ec0ffa3a3..f1ce166216 100644 --- a/tests/compiler/class-override.debug.wat +++ b/tests/compiler/class-override.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func (param i32 i32) (result i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -227,7 +229,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2326,71 +2328,6 @@ local.get $1 call $class-override/A#f ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $class-override/x - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $class-override/B - block $class-override/C - block $class-override/D - block $class-override/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-override/A $class-override/D $class-override/C $class-override/B $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:class-override ) @@ -2407,6 +2344,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $class-override/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2669,4 +2638,69 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $class-override/x + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $class-override/B + block $class-override/C + block $class-override/D + block $class-override/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class-override/A $class-override/D $class-override/C $class-override/B $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/class-override.release.wat b/tests/compiler/class-override.release.wat index 470d06af94..3db2d82e59 100644 --- a/tests/compiler/class-override.release.wat +++ b/tests/compiler/class-override.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (param i32 i32) (result i32))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -37,6 +37,41 @@ (export "fn" (func $class-override/fn)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1540 + i32.lt_s + if + i32.const 34336 + i32.const 34384 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -75,7 +110,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$120 + block $__inlined_func$~lib/rt/itcms/Object#unlink$121 local.get $1 i32.load offset=4 i32.const -4 @@ -99,7 +134,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$120 + br $__inlined_func$~lib/rt/itcms/Object#unlink$121 end local.get $1 i32.load offset=8 @@ -142,7 +177,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1168,7 +1203,7 @@ global.get $class-override/x local.tee $1 i32.store - block $__inlined_func$class-override/A#f@override$126 + block $__inlined_func$class-override/A#f@override$127 block $default block $case1 block $case0 @@ -1184,7 +1219,7 @@ local.get $0 call $class-override/B#f local.set $0 - br $__inlined_func$class-override/A#f@override$126 + br $__inlined_func$class-override/A#f@override$127 end global.get $~lib/memory/__stack_pointer i32.const 4 @@ -1210,7 +1245,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$class-override/A#f@override$126 + br $__inlined_func$class-override/A#f@override$127 end local.get $0 i32.const 1 diff --git a/tests/compiler/class-static-function.debug.wat b/tests/compiler/class-static-function.debug.wat index 8c028d9590..9b42625eb0 100644 --- a/tests/compiler/class-static-function.debug.wat +++ b/tests/compiler/class-static-function.debug.wat @@ -1,10 +1,11 @@ (module (type $0 (func)) (type $1 (func (result i32))) - (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 124)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32892)) (global $~lib/memory/__heap_base i32 (i32.const 32892)) @@ -43,6 +44,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $start:class-static-function (local $0 i32) global.get $~lib/memory/__stack_pointer diff --git a/tests/compiler/class-static-function.release.wat b/tests/compiler/class-static-function.release.wat index 2cec4c8884..b884fea97d 100644 --- a/tests/compiler/class-static-function.release.wat +++ b/tests/compiler/class-static-function.release.wat @@ -1,8 +1,9 @@ (module (type $0 (func (result i32))) - (type $1 (func)) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) + (type $2 (func)) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33916)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -13,6 +14,40 @@ (elem $0 (i32.const 1) $class-static-function/Example.staticFunc) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1148 + i32.lt_s + if + i32.const 33936 + i32.const 33984 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start global.get $~lib/memory/__stack_pointer i32.const 4 @@ -25,7 +60,6 @@ i32.const 33936 i32.const 33984 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/class.debug.wat b/tests/compiler/class.debug.wat index c69e4d351d..0570649c1e 100644 --- a/tests/compiler/class.debug.wat +++ b/tests/compiler/class.debug.wat @@ -5,14 +5,15 @@ (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i32))) - (type $6 (func (param f32 f32) (result f32))) - (type $7 (func (param i32 i32 i32) (result i32))) - (type $8 (func (param i32 f32 f32) (result f32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param f32 f32) (result f32))) + (type $8 (func (param i32 i32 i32) (result i32))) + (type $9 (func (param i32 f32 f32) (result f32))) (type $10 (func (param i32 i32 i64) (result i32))) (type $11 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $class/Animal.ONE (mut i32) (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -24,6 +25,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -310,7 +312,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2436,92 +2438,6 @@ call $class/GenericInitializer#constructor drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 432 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $class/GenericInitializer~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $class/GenericInitializer - block $class/Animal - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class/Animal $class/GenericInitializer $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - local.get $0 - local.get $1 - call $class/GenericInitializer~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:class memory.size @@ -2555,6 +2471,25 @@ unreachable end ) + (func $export:class/test (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $class/test + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $class/test (param $animal i32) (result i32) (local $ptr i32) (local $cls i32) @@ -2658,6 +2593,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) (local $2 i32) (local $3 i32) @@ -2725,7 +2692,7 @@ if i32.const 432 i32.const 480 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -2852,32 +2819,6 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/object/Object#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2906,23 +2847,120 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $export:class/test (param $0 i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 432 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $class/GenericInitializer~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $class/GenericInitializer + block $class/Animal + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class/Animal $class/GenericInitializer $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $class/GenericInitializer~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 0 i32.store - local.get $0 - call $class/test - local.set $1 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/class.release.wat b/tests/compiler/class.release.wat index 7a93b429d2..7a25657b98 100644 --- a/tests/compiler/class.release.wat +++ b/tests/compiler/class.release.wat @@ -2,12 +2,12 @@ (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) (type $7 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -39,6 +39,41 @@ (export "memory" (memory $0)) (export "test" (func $export:class/test)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1568 + i32.lt_s + if + i32.const 34368 + i32.const 34416 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -792,7 +827,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$139 + block $__inlined_func$~lib/rt/itcms/Object#unlink$140 local.get $0 i32.load offset=4 i32.const -4 @@ -816,7 +851,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$139 + br $__inlined_func$~lib/rt/itcms/Object#unlink$140 end local.get $0 i32.load offset=8 @@ -859,7 +894,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/closure-class.debug.wat b/tests/compiler/closure-class.debug.wat new file mode 100644 index 0000000000..5808d54a50 --- /dev/null +++ b/tests/compiler/closure-class.debug.wat @@ -0,0 +1,13686 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func)) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i32) (result i32))) + (type $9 (func (param i32 i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i64) (result i32))) + (type $11 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/rt/__rtti_base i32 (i32.const 2896)) + (global $~lib/memory/__data_end i32 (i32.const 3068)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35836)) + (global $~lib/memory/__heap_base i32 (i32.const 35836)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 412) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00l\00a\00s\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 540) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 636) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 668) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 700) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 732) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 764) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00R\00e\00x\00\00\00\00\00\00\00") + (data $19 (i32.const 796) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00G\00e\00r\00m\00a\00n\00 \00S\00h\00e\00p\00h\00e\00r\00d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 860) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 956) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $24 (i32.const 1004) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $25 (i32.const 1052) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1084) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $27 (i32.const 1212) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 1244) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $29 (i32.const 1276) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $30 (i32.const 1308) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1340) "\1c\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1372) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0e\00\00\00S\00E\00L\00E\00C\00T\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1420) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0c\00\00\00 \00F\00R\00O\00M\00 \00") + (data $34 (i32.const 1452) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0e\00\00\00 \00W\00H\00E\00R\00E\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1500) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1532) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\10\00\00\00i\00d\00,\00 \00n\00a\00m\00e\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $37 (i32.const 1580) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00u\00s\00e\00r\00s\00\00\00") + (data $38 (i32.const 1612) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00a\00c\00t\00i\00v\00e\00 \00=\00 \001\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1660) "l\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00V\00\00\00S\00E\00L\00E\00C\00T\00 \00i\00d\00,\00 \00n\00a\00m\00e\00 \00F\00R\00O\00M\00 \00u\00s\00e\00r\00s\00 \00W\00H\00E\00R\00E\00 \00a\00c\00t\00i\00v\00e\00 \00=\00 \001\00\00\00\00\00\00\00") + (data $40 (i32.const 1772) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $41 (i32.const 1804) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $42 (i32.const 1836) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $43 (i32.const 1868) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00\00\00\00\00") + (data $44 (i32.const 1900) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $45 (i32.const 1932) "\1c\00\00\00\00\00\00\00\00\00\00\00\19\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $46 (i32.const 1964) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00\00\00\00\00") + (data $47 (i32.const 1996) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $48 (i32.const 2028) "\1c\00\00\00\00\00\00\00\00\00\00\00\1b\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $49 (i32.const 2060) "\1c\00\00\00\00\00\00\00\00\00\00\00\1b\00\00\00\08\00\00\00\1b\00\00\00\00\00\00\00\00\00\00\00") + (data $50 (i32.const 2092) "\1c\00\00\00\00\00\00\00\00\00\00\00\1d\00\00\00\08\00\00\00\1c\00\00\00\00\00\00\00\00\00\00\00") + (data $51 (i32.const 2124) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\1d\00\00\00\00\00\00\00\00\00\00\00") + (data $52 (i32.const 2156) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00\1e\00\00\00\00\00\00\00\00\00\00\00") + (data $53 (i32.const 2188) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00\1f\00\00\00\00\00\00\00\00\00\00\00") + (data $54 (i32.const 2220) "\1c\00\00\00\00\00\00\00\00\00\00\00\1e\00\00\00\08\00\00\00 \00\00\00\00\00\00\00\00\00\00\00") + (data $55 (i32.const 2252) "\1c\00\00\00\00\00\00\00\00\00\00\00\1f\00\00\00\08\00\00\00!\00\00\00\00\00\00\00\00\00\00\00") + (data $56 (i32.const 2284) "\1c\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\08\00\00\00\"\00\00\00\00\00\00\00\00\00\00\00") + (data $57 (i32.const 2316) "\1c\00\00\00\00\00\00\00\00\00\00\00\"\00\00\00\08\00\00\00#\00\00\00\00\00\00\00\00\00\00\00") + (data $58 (i32.const 2348) "\1c\00\00\00\00\00\00\00\00\00\00\00\"\00\00\00\08\00\00\00$\00\00\00\00\00\00\00\00\00\00\00") + (data $59 (i32.const 2380) "\1c\00\00\00\00\00\00\00\00\00\00\00$\00\00\00\08\00\00\00%\00\00\00\00\00\00\00\00\00\00\00") + (data $60 (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00&\00\00\00\00\00\00\00\00\00\00\00") + (data $61 (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\'\00\00\00\00\00\00\00\00\00\00\00") + (data $62 (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00(\00\00\00\00\00\00\00\00\00\00\00") + (data $63 (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00)\00\00\00\00\00\00\00\00\00\00\00") + (data $64 (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $65 (i32.const 2572) "\1c\00\00\00\00\00\00\00\00\00\00\00&\00\00\00\08\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data $66 (i32.const 2604) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00,\00\00\00\00\00\00\00\00\00\00\00") + (data $67 (i32.const 2636) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data $68 (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data $69 (i32.const 2700) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00/\00\00\00\00\00\00\00\00\00\00\00") + (data $70 (i32.const 2732) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $71 (i32.const 2764) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data $72 (i32.const 2796) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data $73 (i32.const 2828) "\1c\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\08\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data $74 (i32.const 2860) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data $75 (i32.const 2896) "*\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02A\00\00 \00\00\00") + (table $0 53 53 funcref) + (elem $0 (i32.const 1) $closure-class/Counter#getIncrementClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getDepositClosure~anonymous|0 $closure-class/BankAccount#getWithdrawClosure~anonymous|0 $closure-class/BankAccount#getBalanceClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Calculator#getOperationClosure~anonymous|0 $closure-class/Outer#getComputeClosure~anonymous|0 $closure-class/Outer#getInnerSetterClosure~anonymous|0 $closure-class/Animal#getAgeClosure~anonymous|0 $closure-class/Animal#getAgeIncrementClosure~anonymous|0 $closure-class/Dog#getBreedClosure~anonymous|0 $closure-class/DataProcessor#getProcessorClosure~anonymous|0 $closure-class/QueryBuilder#getSelectClosure~anonymous|0 $closure-class/QueryBuilder#getFromClosure~anonymous|0 $closure-class/QueryBuilder#getWhereClosure~anonymous|0 $closure-class/QueryBuilder#getBuildClosure~anonymous|0 $closure-class/StateMachine#getStartClosure~anonymous|0 $closure-class/StateMachine#getPauseClosure~anonymous|0 $closure-class/StateMachine#getStopClosure~anonymous|0 $closure-class/StateMachine#getResetClosure~anonymous|0 $closure-class/StateMachine#getStateClosure~anonymous|0 $closure-class/Observable#getSubscribeClosure~anonymous|0 $closure-class/Observable#getSetClosure~anonymous|0 $closure-class/Observable#getGetClosure~anonymous|0 $closure-class/ObserverState#getCountObserver~anonymous|0 $closure-class/ObserverState#getDiffObserver~anonymous|0 $closure-class/Box#getMapClosure~anonymous|0 $closure-class/Box#getValueClosure~anonymous|0 $closure-class/testBoxMap~anonymous|0 $closure-class/testBoxMap~anonymous|1 $closure-class/testBoxMap~anonymous|2 $closure-class/Box#getFlatMapClosure~anonymous|0 $closure-class/testBoxFlatMap~anonymous|0 $closure-class/ChainableCounter#getAddClosure~anonymous|0 $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 $closure-class/Task#getThenClosure~anonymous|0 $closure-class/Task#getCompleteClosure~anonymous|0 $closure-class/testTaskCallbacks~anonymous|0 $closure-class/testTaskCallbackAfterComplete~anonymous|0 $closure-class/Resource#getAcquireClosure~anonymous|0 $closure-class/Resource#getReleaseClosure~anonymous|0 $closure-class/Resource#getUseClosure~anonymous|0 $closure-class/testResourceManagement~anonymous|0 $closure-class/testResourceManagement~anonymous|1 $closure-class/testResourceManagement~anonymous|2 $closure-class/testResourceManagement~anonymous|3 $closure-class/testResourceManagement~anonymous|4 $closure-class/TreeNode#getSumClosure~anonymous|0 $closure-class/TreeNode#getDepthClosure~anonymous|0 $closure-class/Range#getHasNextClosure~anonymous|0 $closure-class/Range#getNextClosure~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure-class/Counter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $closure-class/Counter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Counter#getIncrementClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Counter#getCountClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#set:balance (param $this i32) (param $balance i32) + local.get $this + local.get $balance + i32.store + ) + (func $closure-class/BankAccount#set:transactionCount (param $this i32) (param $transactionCount i32) + local.get $this + local.get $transactionCount + i32.store offset=4 + ) + (func $closure-class/BankAccount#get:balance (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/BankAccount#get:transactionCount (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/BankAccount#getDepositClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getWithdrawClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getBalanceClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 5 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/BankAccount#getTransactionCountClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 6 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Calculator#set:result (param $this i32) (param $result i32) + local.get $this + local.get $result + i32.store + ) + (func $closure-class/Calculator#get:result (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Calculator#getOperationClosure (param $this i32) (param $operand i32) (param $operation i32) (result i32) + (local $$env i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $operation + i32.store offset=4 + local.get $$env + local.get $this + i32.store offset=8 + local.get $$env + local.get $operand + i32.store offset=12 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 7 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure-class/Inner#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $closure-class/Outer#set:inner (param $this i32) (param $inner i32) + local.get $this + local.get $inner + i32.store + local.get $this + local.get $inner + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Outer#set:multiplier (param $this i32) (param $multiplier i32) + local.get $this + local.get $multiplier + i32.store offset=4 + ) + (func $closure-class/Outer#get:inner (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Inner#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Outer#get:multiplier (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Outer#getComputeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 8 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Outer#getInnerSetterClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 9 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Animal#set:name (param $this i32) (param $name i32) + local.get $this + local.get $name + i32.store + local.get $this + local.get $name + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Animal#set:age (param $this i32) (param $age i32) + local.get $this + local.get $age + i32.store offset=4 + ) + (func $closure-class/Dog#set:breed (param $this i32) (param $breed i32) + local.get $this + local.get $breed + i32.store offset=8 + local.get $this + local.get $breed + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Animal#get:age (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Animal#getAgeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 10 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Animal#getAgeIncrementClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 11 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Dog#get:breed (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Dog#getBreedClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 12 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $7 + i32.const 1 + i32.sub + local.set $len + local.get $7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28i32%29=>void>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28i32%29=>void>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28i32%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/EventEmitter#set:listeners (param $this i32) (param $listeners i32) + local.get $this + local.get $listeners + i32.store + local.get $this + local.get $listeners + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/DataProcessor#set:processedCount (param $this i32) (param $processedCount i32) + local.get $this + local.get $processedCount + i32.store + ) + (func $closure-class/DataProcessor#set:lastValue (param $this i32) (param $lastValue i32) + local.get $this + local.get $lastValue + i32.store offset=4 + ) + (func $closure-class/DataProcessor#set:sum (param $this i32) (param $sum i32) + local.get $this + local.get $sum + i32.store offset=8 + ) + (func $closure-class/DataProcessor#get:processedCount (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/DataProcessor#get:sum (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/DataProcessor#getProcessorClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 13 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/EventEmitter#get:listeners (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28i32%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/DataProcessor#get:lastValue (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/QueryBuilder#set:selectFields (param $this i32) (param $selectFields i32) + local.get $this + local.get $selectFields + i32.store + local.get $this + local.get $selectFields + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#set:tableName (param $this i32) (param $tableName i32) + local.get $this + local.get $tableName + i32.store offset=4 + local.get $this + local.get $tableName + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#set:whereClause (param $this i32) (param $whereClause i32) + local.get $this + local.get $whereClause + i32.store offset=8 + local.get $this + local.get $whereClause + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/QueryBuilder#getSelectClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 14 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getFromClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 15 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getWhereClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 16 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/QueryBuilder#get:selectFields (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/QueryBuilder#get:tableName (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/QueryBuilder#get:whereClause (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/QueryBuilder#getBuildClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 17 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store + ) + (func $closure-class/StateMachine#get:state (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/StateMachine#getStartClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 18 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getPauseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getStopClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 20 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getResetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 21 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/StateMachine#getStateClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 22 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/Observable#set:observers (param $this i32) (param $observers i32) + local.get $this + local.get $observers + i32.store offset=4 + local.get $this + local.get $observers + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Observable#get:observers (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Observable#getSubscribeClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 25 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 23 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Observable#getSetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 24 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Observable#getGetClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 25 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/ObserverState#set:changeCount (param $this i32) (param $changeCount i32) + local.get $this + local.get $changeCount + i32.store + ) + (func $closure-class/ObserverState#set:totalDiff (param $this i32) (param $totalDiff i32) + local.get $this + local.get $totalDiff + i32.store offset=4 + ) + (func $closure-class/ObserverState#get:changeCount (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/ObserverState#getCountObserver (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 26 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/ObserverState#get:totalDiff (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/ObserverState#getDiffObserver (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 27 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Box#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $closure-class/Box#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Box#getMapClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 29 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 28 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Box#getValueClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 29 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testBoxMap~anonymous|0 (param $v i32) (result i32) + local.get $v + i32.const 2 + i32.mul + ) + (func $closure-class/testBoxMap~anonymous|1 (param $v i32) (result i32) + local.get $v + i32.const 3 + i32.add + ) + (func $closure-class/testBoxMap~anonymous|2 (param $v i32) (result i32) + local.get $v + local.get $v + i32.mul + ) + (func $closure-class/Box#getFlatMapClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 31 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 33 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testBoxFlatMap~anonymous|0 (param $v i32) (result i32) + i32.const 0 + local.get $v + i32.const 10 + i32.mul + call $closure-class/Box#constructor + ) + (func $closure-class/ChainableCounter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $closure-class/ChainableCounter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/ChainableCounter#getAddClosure (param $this i32) (param $amount i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + local.get $$env + local.get $amount + i32.store offset=8 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 35 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-class/ChainableCounter#getMultiplyClosure (param $this i32) (param $factor i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + local.get $$env + local.get $factor + i32.store offset=8 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 36 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-class/Task#set:completed (param $this i32) (param $completed i32) + local.get $this + local.get $completed + i32.store8 + ) + (func $closure-class/Task#set:result (param $this i32) (param $result i32) + local.get $this + local.get $result + i32.store offset=4 + ) + (func $closure-class/Task#set:callbacks (param $this i32) (param $callbacks i32) + local.get $this + local.get $callbacks + i32.store offset=8 + local.get $this + local.get $callbacks + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/Task#get:completed (param $this i32) (result i32) + local.get $this + i32.load8_u + ) + (func $closure-class/Task#get:result (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Task#get:callbacks (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Task#getThenClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 36 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 37 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Task#getCompleteClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 38 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testTaskCallbacks~anonymous|0 (param $result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $result + i32.const 2 + i32.mul + i32.store offset=4 + ) + (func $closure-class/testTaskCallbackAfterComplete~anonymous|0 (param $result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $result + i32.store offset=4 + ) + (func $closure-class/Resource#set:acquired (param $this i32) (param $acquired i32) + local.get $this + local.get $acquired + i32.store8 + ) + (func $closure-class/Resource#set:useCount (param $this i32) (param $useCount i32) + local.get $this + local.get $useCount + i32.store offset=4 + ) + (func $closure-class/Resource#get:acquired (param $this i32) (result i32) + local.get $this + i32.load8_u + ) + (func $closure-class/Resource#getAcquireClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 41 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Resource#getReleaseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 42 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Resource#get:useCount (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Resource#getUseClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 38 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 43 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/testResourceManagement~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-class/testResourceManagement~anonymous|1 (result i32) + i32.const 10 + ) + (func $closure-class/testResourceManagement~anonymous|2 (result i32) + i32.const 20 + ) + (func $closure-class/testResourceManagement~anonymous|3 (result i32) + i32.const 30 + ) + (func $closure-class/testResourceManagement~anonymous|4 (result i32) + i32.const 42 + ) + (func $closure-class/TreeNode#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-class/TreeNode#set:children (param $this i32) (param $children i32) + local.get $this + local.get $children + i32.store offset=4 + local.get $this + local.get $children + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-class/TreeNode#get:children (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/TreeNode#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/TreeNode#getSumClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 49 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/TreeNode#getDepthClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 50 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Range#set:current (param $this i32) (param $current i32) + local.get $this + local.get $current + i32.store + ) + (func $closure-class/Range#set:endVal (param $this i32) (param $endVal i32) + local.get $this + local.get $endVal + i32.store offset=4 + ) + (func $closure-class/Range#set:step (param $this i32) (param $step i32) + local.get $this + local.get $step + i32.store offset=8 + ) + (func $closure-class/Range#get:step (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $closure-class/Range#get:current (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-class/Range#get:endVal (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-class/Range#getHasNextClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 51 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-class/Range#getNextClosure (param $this i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 52 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $start:closure-class + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $closure-class/testBasicThisCapture + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testMultipleInstances + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBankAccount + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 125 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testCalculatorClosures + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 168 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testNestedClosures + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 226 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testInheritanceClosures + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 285 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testEventEmitterPattern + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 345 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBuilderPattern + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 403 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testStateMachine + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 486 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testObservable + i32.const 43 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 562 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBoxMap + i32.const 169 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 604 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBoxFlatMap + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 615 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testClosureChaining + i32.const 35 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTaskCallbacks + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 720 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTaskCallbackAfterComplete + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 738 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testResourceManagement + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 814 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testTreePattern + i32.const 2103 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 889 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testRangeIterator + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 944 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testReverseRangeIterator + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 959 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + ) + (func $~start + call $start:closure-class + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 35856 + i32.const 35904 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Counter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Counter#getIncrementClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Counter#get:count + i32.const 1 + i32.add + call $closure-class/Counter#set:count + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getCountClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Counter#get:count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBasicThisCapture (result i32) + (local $c i32) + (local $inc i32) + (local $get i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c + i32.store + global.get $~lib/memory/__stack_pointer + local.get $c + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Counter#getIncrementClosure + local.tee $inc + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $c + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Counter#getCountClosure + local.tee $get + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/testMultipleInstances (result i32) + (local $c1 i32) + (local $c2 i32) + (local $inc1 i32) + (local $inc2 i32) + (local $get1 i32) + (local $get2 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Counter#constructor + local.tee $c2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $c1 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getIncrementClosure + local.tee $inc1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $c2 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getIncrementClosure + local.tee $inc2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $c1 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getCountClosure + local.tee $get1 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $c2 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=8 + local.get $13 + call $closure-class/Counter#getCountClosure + local.tee $get2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get1 + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 10 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get2 + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $2) + i32.add + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $closure-class/BankAccount#constructor (param $this i32) (param $initialBalance i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/BankAccount#set:balance + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/BankAccount#set:transactionCount + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $initialBalance + call $closure-class/BankAccount#set:balance + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/BankAccount#getDepositClosure~anonymous|0 (param $amount i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.add + call $closure-class/BankAccount#set:balance + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:transactionCount + i32.const 1 + i32.add + call $closure-class/BankAccount#set:transactionCount + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/BankAccount#getWithdrawClosure~anonymous|0 (param $amount i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.ge_s + if + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:balance + local.get $amount + i32.sub + call $closure-class/BankAccount#set:balance + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/BankAccount#get:transactionCount + i32.const 1 + i32.add + call $closure-class/BankAccount#set:transactionCount + i32.const 1 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + i32.const 0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/BankAccount#getBalanceClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/BankAccount#get:balance + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/BankAccount#get:transactionCount + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBankAccount (result i32) + (local $account i32) + (local $deposit i32) + (local $withdraw i32) + (local $getBalance i32) + (local $getTxCount i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 68 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 100 + call $closure-class/BankAccount#constructor + local.tee $account + i32.store + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getDepositClosure + local.tee $deposit + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getWithdrawClosure + local.tee $withdraw + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getBalanceClosure + local.tee $getBalance + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $account + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=4 + local.get $16 + call $closure-class/BankAccount#getTransactionCountClosure + local.tee $getTxCount + i32.store offset=20 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $deposit + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 150 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 111 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 30 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 113 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 114 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 200 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 116 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 117 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getTxCount + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 118 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 100 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $deposit + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + i32.const 220 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $withdraw + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 121 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBalance + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $2) + i32.const 1000 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getTxCount + local.tee $15 + i32.store offset=64 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $2) + i32.add + local.set $16 + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $16 + return + ) + (func $closure-class/Calculator#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Calculator#set:result + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Calculator#getOperationClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 0 + i32.eq + if + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=12 + i32.add + call $closure-class/Calculator#set:result + else + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.eq + if + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=12 + i32.sub + call $closure-class/Calculator#set:result + else + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.eq + if + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Calculator#get:result + local.get $$closureEnv + i32.load offset=12 + i32.mul + call $closure-class/Calculator#set:result + end + end + end + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Calculator#get:result + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testCalculatorClosures (result i32) + (local $calc i32) + (local $addFive i32) + (local $subtractTwo i32) + (local $multiplyThree i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Calculator#constructor + local.tee $calc + i32.store + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 5 + i32.const 0 + call $closure-class/Calculator#getOperationClosure + local.tee $addFive + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + i32.const 1 + call $closure-class/Calculator#getOperationClosure + local.tee $subtractTwo + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3 + i32.const 2 + call $closure-class/Calculator#getOperationClosure + local.tee $multiplyThree + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addFive + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addFive + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $subtractTwo + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $multiplyThree + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + drop + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/Calculator#get:result + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/Inner#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Inner#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/Inner#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/Outer#constructor (param $this i32) (param $innerValue i32) (param $mult i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Outer#set:inner + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Outer#set:multiplier + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $innerValue + call $closure-class/Inner#constructor + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-class/Outer#set:inner + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $mult + call $closure-class/Outer#set:multiplier + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/Outer#getComputeClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Outer#get:inner + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Inner#get:value + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Outer#get:multiplier + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Outer#getInnerSetterClosure~anonymous|0 (param $v i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Outer#get:inner + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $v + call $closure-class/Inner#set:value + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testNestedClosures (result i32) + (local $outer i32) + (local $compute i32) + (local $setInner i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + i32.const 3 + call $closure-class/Outer#constructor + local.tee $outer + i32.store + global.get $~lib/memory/__stack_pointer + local.get $outer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Outer#getComputeClosure + local.tee $compute + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $outer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Outer#getInnerSetterClosure + local.tee $setInner + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setInner + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $compute + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/Animal#constructor (param $this i32) (param $name i32) (param $age i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Animal#set:name + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-class/Animal#set:age + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $name + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-class/Animal#set:name + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $age + call $closure-class/Animal#set:age + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/Dog#constructor (param $this i32) (param $name i32) (param $age i32) (param $breed i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Dog#set:breed + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $name + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + local.get $age + call $closure-class/Animal#constructor + local.tee $this + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $breed + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + call $closure-class/Dog#set:breed + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $closure-class/Animal#getAgeClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Animal#get:age + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Animal#getAgeIncrementClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/Animal#get:age + i32.const 1 + i32.add + call $closure-class/Animal#set:age + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Dog#getBreedClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Dog#get:breed + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/testInheritanceClosures (result i32) + (local $dog i32) + (local $getAge i32) + (local $incAge i32) + (local $getBreed i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 784 + i32.const 3 + i32.const 816 + call $closure-class/Dog#constructor + local.tee $dog + i32.store + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Animal#getAgeClosure + local.tee $getAge + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Animal#getAgeIncrementClosure + local.tee $incAge + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $dog + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Dog#getBreedClosure + local.tee $getBreed + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getAge + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 277 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getBreed + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 816 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 278 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incAge + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incAge + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getAge + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28i32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28i32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28i32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/EventEmitter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 16 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $closure-class/EventEmitter#set:listeners + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/DataProcessor#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:processedCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:lastValue + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/DataProcessor#set:sum + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/DataProcessor#getProcessorClosure~anonymous|0 (param $data i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/DataProcessor#get:processedCount + i32.const 1 + i32.add + call $closure-class/DataProcessor#set:processedCount + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $data + call $closure-class/DataProcessor#set:lastValue + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/DataProcessor#get:sum + local.get $data + i32.add + call $closure-class/DataProcessor#set:sum + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28i32%29=>void>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/EventEmitter#addListener (param $this i32) (param $listener i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/EventEmitter#get:listeners + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $listener + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array<%28i32%29=>void>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/EventEmitter#emit (param $this i32) (param $data i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/EventEmitter#get:listeners + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.lt_s + if + local.get $data + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/EventEmitter#get:listeners + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testEventEmitterPattern (result i32) + (local $emitter i32) + (local $processor1 i32) + (local $processor2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/EventEmitter#constructor + local.tee $emitter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/DataProcessor#constructor + local.tee $processor1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/DataProcessor#constructor + local.tee $processor2 + i32.store offset=8 + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + call $closure-class/EventEmitter#addListener + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + call $closure-class/EventEmitter#addListener + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 10 + call $closure-class/EventEmitter#emit + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 20 + call $closure-class/EventEmitter#emit + local.get $emitter + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.const 30 + call $closure-class/EventEmitter#emit + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:processedCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 336 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:processedCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 337 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 338 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 339 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:lastValue + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 340 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:lastValue + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 341 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $processor1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + local.get $processor2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $closure-class/DataProcessor#get:sum + i32.add + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/QueryBuilder#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1232 + call $closure-class/QueryBuilder#set:selectFields + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1264 + call $closure-class/QueryBuilder#set:tableName + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1264 + call $closure-class/QueryBuilder#set:whereClause + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/QueryBuilder#getSelectClosure~anonymous|0 (param $fields i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $fields + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:selectFields + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getFromClosure~anonymous|0 (param $table i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $table + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:tableName + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getWhereClosure~anonymous|0 (param $clause i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $clause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#set:whereClause + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize + i32.add + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 1264 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $right + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/QueryBuilder#getBuildClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $query i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/__closure_env + local.set $$closureEnv + global.get $~lib/memory/__stack_pointer + i32.const 1392 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + call $closure-class/QueryBuilder#get:selectFields + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.const 1440 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/QueryBuilder#get:tableName + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.tee $query + i32.store offset=20 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/QueryBuilder#get:whereClause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/string/String#get:length + i32.const 0 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $query + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 1472 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $closure-class/QueryBuilder#get:whereClause + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + local.tee $query + i32.store offset=20 + end + local.get $query + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/testBuilderPattern (result i32) + (local $builder i32) + (local $select i32) + (local $from i32) + (local $where i32) + (local $build i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $query i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/QueryBuilder#constructor + local.tee $builder + i32.store + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getSelectClosure + local.tee $select + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getFromClosure + local.tee $from + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getWhereClosure + local.tee $where + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $builder + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + call $closure-class/QueryBuilder#getBuildClosure + local.tee $build + i32.store offset=20 + i32.const 1552 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $select + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + i32.const 1600 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $from + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + i32.const 1632 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $where + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $build + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + local.tee $query + i32.store offset=40 + local.get $query + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + i32.const 1680 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 399 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-class/StateMachine#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 21 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/StateMachine#set:state + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/StateMachine#getStartClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 2 + i32.eq + end + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getPauseClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 1 + i32.eq + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getStopClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 1 + i32.eq + if (result i32) + i32.const 1 + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + i32.const 2 + i32.eq + end + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 3 + call $closure-class/StateMachine#set:state + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/StateMachine#getResetClosure~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $closure-class/StateMachine#set:state + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/StateMachine#getStateClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/StateMachine#get:state + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testStateMachine (result i32) + (local $sm i32) + (local $start i32) + (local $pause i32) + (local $stop i32) + (local $reset i32) + (local $getState i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 84 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/StateMachine#constructor + local.tee $sm + i32.store + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStartClosure + local.tee $start + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getPauseClosure + local.tee $pause + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStopClosure + local.tee $stop + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getResetClosure + local.tee $reset + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $sm + local.set $20 + global.get $~lib/memory/__stack_pointer + local.get $20 + i32.store offset=4 + local.get $20 + call $closure-class/StateMachine#getStateClosure + local.tee $getState + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 463 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 465 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 466 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 468 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $pause + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 470 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 471 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 473 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $2) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 474 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $stop + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 476 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $15 + i32.store offset=64 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 477 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $start + local.tee $16 + i32.store offset=68 + local.get $16 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 479 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $reset + local.tee $17 + i32.store offset=72 + local.get $17 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $18 + i32.store offset=76 + local.get $18 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $2) + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 482 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getState + local.tee $19 + i32.store offset=80 + local.get $19 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $2) + local.set $20 + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $20 + return + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 24 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/Observable#constructor (param $this i32) (param $initial i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 23 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Observable#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/Observable#set:observers + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $initial + call $closure-class/Observable#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28i32%2Ci32%29=>void>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/Observable#getSubscribeClosure~anonymous|0 (param $observer i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/Observable#get:observers + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $observer + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/Observable#getSetClosure~anonymous|0 (param $newValue i32) + (local $$closureEnv i32) + (local $oldValue i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/Observable#get:value + local.set $oldValue + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $newValue + call $closure-class/Observable#set:value + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/Observable#get:observers + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length + i32.lt_s + if + local.get $oldValue + local.get $newValue + global.get $~lib/memory/__stack_pointer + i32.const 2 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/Observable#get:observers + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $i + call $~lib/array/Array<%28i32%2Ci32%29=>void>#__get + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Observable#getGetClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Observable#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ObserverState#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 26 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ObserverState#set:changeCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ObserverState#set:totalDiff + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ObserverState#getCountObserver~anonymous|0 (param $oldVal i32) (param $newVal i32) + (local $$closureEnv i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/ObserverState#get:changeCount + i32.const 1 + i32.add + call $closure-class/ObserverState#set:changeCount + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getDiffObserver~anonymous|0 (param $oldVal i32) (param $newVal i32) + (local $$closureEnv i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/ObserverState#get:totalDiff + local.get $newVal + local.get $oldVal + i32.sub + i32.add + call $closure-class/ObserverState#set:totalDiff + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/testObservable (result i32) + (local $obs i32) + (local $subscribe i32) + (local $set i32) + (local $get i32) + (local $state i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $closure-class/Observable#constructor + local.tee $obs + i32.store + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/Observable#getSubscribeClosure + local.tee $subscribe + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/Observable#getSetClosure + local.tee $set + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $obs + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/Observable#getGetClosure + local.tee $get + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/ObserverState#constructor + local.tee $state + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $subscribe + local.tee $5 + i32.store offset=24 + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=32 + local.get $14 + call $closure-class/ObserverState#getCountObserver + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $5 + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $subscribe + local.tee $7 + i32.store offset=36 + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=32 + local.get $14 + call $closure-class/ObserverState#getDiffObserver + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $7 + local.tee $8 + i32.store offset=40 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $9 + i32.store offset=44 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + i32.const 25 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $10 + i32.store offset=48 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $3) + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $set + local.tee $11 + i32.store offset=52 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $12 + i32.store offset=56 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $2) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 556 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/ObserverState#get:changeCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 557 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/ObserverState#get:totalDiff + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 558 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $13 + i32.store offset=60 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $2) + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/ObserverState#get:changeCount + i32.add + local.get $state + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $closure-class/ObserverState#get:totalDiff + i32.add + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $closure-class/Box#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 28 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/Box#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/Box#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-class/Box#getMapClosure~anonymous|0 (param $fn i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + global.get $~lib/memory/__stack_pointer + local.get $fn + local.tee $2 + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $closure-class/Box#get:value + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $2 + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + call $closure-class/Box#set:value + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Box#getValueClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Box#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/testBoxMap (result i32) + (local $box i32) + (local $map i32) + (local $getValue i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/Box#constructor + local.tee $box + i32.store + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Box#getMapClosure + local.tee $map + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $closure-class/Box#getValueClosure + local.tee $getValue + i32.store offset=12 + i32.const 2176 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + i32.const 2208 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + i32.const 2240 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $map + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-class/Box#getFlatMapClosure~anonymous|0 (param $fn i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + global.get $~lib/memory/__stack_pointer + local.get $fn + local.tee $2 + i32.store + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + call $closure-class/Box#get:value + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $2 + local.tee $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/testBoxFlatMap (result i32) + (local $box i32) + (local $flatMap i32) + (local $2 i32) + (local $result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/Box#constructor + local.tee $box + i32.store + global.get $~lib/memory/__stack_pointer + local.get $box + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Box#getFlatMapClosure + local.tee $flatMap + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 2304 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $flatMap + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.tee $result + i32.store offset=16 + local.get $result + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Box#get:value + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/ChainableCounter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 33 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/ChainableCounter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/ChainableCounter#getAddClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/ChainableCounter#get:count + local.get $$closureEnv + i32.load offset=8 + i32.add + call $closure-class/ChainableCounter#set:count + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-class/ChainableCounter#get:count + local.get $$closureEnv + i32.load offset=8 + i32.mul + call $closure-class/ChainableCounter#set:count + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testClosureChaining (result i32) + (local $counter i32) + (local $add5 i32) + (local $add10 i32) + (local $mult2 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/ChainableCounter#constructor + local.tee $counter + i32.store + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 5 + call $closure-class/ChainableCounter#getAddClosure + local.tee $add5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + call $closure-class/ChainableCounter#getAddClosure + local.tee $add10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + call $closure-class/ChainableCounter#getMultiplyClosure + local.tee $mult2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add5 + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $mult2 + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add5 + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + drop + local.get $counter + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $closure-class/ChainableCounter#get:count + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-class/Task#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 35 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Task#set:completed + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Task#set:result + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $closure-class/Task#set:callbacks + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Task#getThenClosure~anonymous|0 (param $callback i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-class/Task#get:completed + if + global.get $~lib/memory/__stack_pointer + local.get $callback + local.tee $2 + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-class/Task#get:result + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $2 + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + else + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + call $closure-class/Task#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $callback + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#push + drop + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#getCompleteClosure~anonymous|0 (param $result i32) + (local $$closureEnv i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.const 1 + call $closure-class/Task#set:completed + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $result + call $closure-class/Task#set:result + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Task#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.lt_s + if + local.get $result + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-class/Task#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#isCompleted (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Task#get:completed + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testTaskCallbacks (result i32) + (local $$env i32) + (local $task i32) + (local $then i32) + (local $complete i32) + (local $receivedValue i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Task#constructor + local.tee $task + i32.store + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Task#getThenClosure + local.tee $then + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Task#getCompleteClosure + local.tee $complete + i32.store offset=12 + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $then + local.tee $6 + i32.store offset=16 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 39 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $6 + local.tee $7 + i32.store offset=20 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 711 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 21 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $complete + local.tee $8 + i32.store offset=24 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 715 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $task + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Task#isCompleted + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 716 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $closure-class/testTaskCallbackAfterComplete (result i32) + (local $$env i32) + (local $task i32) + (local $then i32) + (local $complete i32) + (local $4 i32) + (local $receivedValue i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Task#constructor + local.tee $task + i32.store + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Task#getThenClosure + local.tee $then + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $task + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $closure-class/Task#getCompleteClosure + local.tee $complete + i32.store offset=12 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $complete + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $then + local.tee $7 + i32.store offset=20 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 40 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $7 + local.tee $8 + i32.store offset=24 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $closure-class/Resource#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 37 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Resource#set:acquired + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-class/Resource#set:useCount + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-class/Resource#getAcquireClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:acquired + i32.eqz + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $closure-class/Resource#set:acquired + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/Resource#getReleaseClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:acquired + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $closure-class/Resource#set:acquired + i32.const 1 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/Resource#getUseClosure~anonymous|0 (param $action i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $closure-class/Resource#get:acquired + if + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $$closureEnv + i32.load offset=4 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $closure-class/Resource#get:useCount + i32.const 1 + i32.add + call $closure-class/Resource#set:useCount + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $action + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + i32.const -1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/Resource#getUseCount (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Resource#get:useCount + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-class/testResourceManagement (result i32) + (local $resource i32) + (local $acquire i32) + (local $release i32) + (local $use i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-class/Resource#constructor + local.tee $resource + i32.store + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getAcquireClosure + local.tee $acquire + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getReleaseClosure + local.tee $release + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseClosure + local.tee $use + i32.store offset=16 + i32.const 2624 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 792 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $acquire + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 795 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $acquire + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 796 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2656 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $7 + i32.store offset=32 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 799 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2688 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $8 + i32.store offset=36 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 800 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2720 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $9 + i32.store offset=40 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 801 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 803 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $release + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 806 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $release + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 807 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2752 + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $use + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 810 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $resource + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $closure-class/Resource#getUseCount + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 40 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 976 + i32.const 1024 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $closure-class/TreeNode#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 39 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-class/TreeNode#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/TreeNode#set:children + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $closure-class/TreeNode#set:value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/array/Array#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-class/TreeNode#addChild (param $this i32) (param $child i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $closure-class/TreeNode#get:children + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $child + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/array/Array#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 1024 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1104 + i32.const 1024 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-class/TreeNode#getSumClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $sum i32) + (local $i i32) + (local $childSum i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/TreeNode#get:value + local.set $sum + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $closure-class/TreeNode#get:children + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $$closureEnv + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + call $closure-class/TreeNode#get:children + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-class/TreeNode#getSumClosure + local.tee $childSum + i32.store offset=12 + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $childSum + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $sum + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-class/TreeNode#getDepthClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $maxChildDepth i32) + (local $i i32) + (local $childDepth i32) + (local $4 i32) + (local $d i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.const 0 + i32.eq + if + i32.const 1 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + i32.const 0 + local.set $maxChildDepth + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $$closureEnv + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $closure-class/TreeNode#get:children + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + call $~lib/array/Array#__get + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $closure-class/TreeNode#getDepthClosure + local.tee $childDepth + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $childDepth + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + local.set $d + local.get $d + local.get $maxChildDepth + i32.gt_s + if + local.get $d + local.set $maxChildDepth + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $maxChildDepth + i32.const 1 + i32.add + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-class/testTreePattern (result i32) + (local $root i32) + (local $n2 i32) + (local $n3 i32) + (local $n4 i32) + (local $n5 i32) + (local $n6 i32) + (local $getSum i32) + (local $getDepth i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 1 + call $closure-class/TreeNode#constructor + local.tee $root + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + call $closure-class/TreeNode#constructor + local.tee $n2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $closure-class/TreeNode#constructor + local.tee $n3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $closure-class/TreeNode#constructor + local.tee $n4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $closure-class/TreeNode#constructor + local.tee $n5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 6 + call $closure-class/TreeNode#constructor + local.tee $n6 + i32.store offset=20 + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n3 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n5 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + local.get $n3 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + local.get $n6 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=28 + local.get $12 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + call $closure-class/TreeNode#getSumClosure + local.tee $getSum + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $root + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=24 + local.get $12 + call $closure-class/TreeNode#getDepthClosure + local.tee $getDepth + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getSum + local.tee $8 + i32.store offset=40 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + i32.const 21 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 884 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getDepth + local.tee $9 + i32.store offset=44 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getSum + local.tee $10 + i32.store offset=48 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.const 100 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getDepth + local.tee $11 + i32.store offset=52 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $2) + i32.add + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $closure-class/Range#constructor (param $this i32) (param $start i32) (param $endVal i32) (param $step i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 41 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:current + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:endVal + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $closure-class/Range#set:step + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $start + call $closure-class/Range#set:current + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $endVal + call $closure-class/Range#set:endVal + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $step + call $closure-class/Range#set:step + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $closure-class/Range#getHasNextClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:step + i32.const 0 + i32.gt_s + if + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:endVal + i32.lt_s + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + else + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-class/Range#get:endVal + i32.gt_s + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + unreachable + ) + (func $closure-class/Range#getNextClosure~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $closure-class/Range#get:current + local.set $value + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Range#get:current + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-class/Range#get:step + i32.add + call $closure-class/Range#set:current + local.get $value + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-class/testRangeIterator (result i32) + (local $range i32) + (local $hasNext i32) + (local $next i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + i32.const 5 + i32.const 1 + call $closure-class/Range#constructor + local.tee $range + i32.store + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getHasNextClosure + local.tee $hasNext + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getNextClosure + local.tee $next + i32.store offset=12 + i32.const 0 + local.set $sum + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $hasNext + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $next + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + br $while-continue|0 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-class/testReverseRangeIterator (result i32) + (local $range i32) + (local $hasNext i32) + (local $next i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + i32.const 0 + i32.const -2 + call $closure-class/Range#constructor + local.tee $range + i32.store + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getHasNextClosure + local.tee $hasNext + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $range + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-class/Range#getNextClosure + local.tee $next + i32.store offset=12 + i32.const 0 + local.set $sum + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $hasNext + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $next + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + br $while-continue|0 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 976 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>#__visit + ) + (func $closure-class/Outer~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $closure-class/Dog~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $closure-class/Animal~visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $closure-class/Animal~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>#__visit + ) + (func $closure-class/EventEmitter~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<%28i32%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#__visit + ) + (func $closure-class/QueryBuilder~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>#__visit + ) + (func $closure-class/Observable~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#__visit + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-class/Box>#__visit + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#__visit + ) + (func $closure-class/Task~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>#__visit + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>#__visit + ) + (func $closure-class/TreeNode~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $closure-class/Range + block $~lib/array/Array + block $closure-class/TreeNode + block $~lib/function/Function<%28%28%29=>i32%29=>i32> + block $closure-class/Resource + block $~lib/function/Function<%28%28i32%29=>void%29=>void> + block $closure-class/Task + block $~lib/function/Function<%28%29=>closure-class/ChainableCounter> + block $closure-class/ChainableCounter + block $~lib/function/Function<%28i32%29=>closure-class/Box> + block $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/function/Function<%28%28i32%29=>i32%29=>void> + block $closure-class/Box + block $~lib/function/Function<%28i32%2Ci32%29=>void> + block $closure-class/ObserverState + block $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void> + block $~lib/array/Array<%28i32%2Ci32%29=>void> + block $closure-class/Observable + block $~lib/function/Function<%28%29=>bool> + block $closure-class/StateMachine + block $~lib/function/Function<%28~lib/string/String%29=>void> + block $closure-class/QueryBuilder + block $closure-class/DataProcessor + block $~lib/array/Array<%28i32%29=>void> + block $closure-class/EventEmitter + block $~lib/function/Function<%28%29=>~lib/string/String> + block $closure-class/Animal + block $closure-class/Dog + block $closure-class/Inner + block $closure-class/Outer + block $closure-class/Calculator + block $~lib/function/Function<%28i32%29=>bool> + block $~lib/function/Function<%28i32%29=>void> + block $closure-class/BankAccount + block $~lib/function/Function<%28%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $closure-class/Counter + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $closure-class/Counter $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28%29=>i32> $closure-class/BankAccount $~lib/function/Function<%28i32%29=>void> $~lib/function/Function<%28i32%29=>bool> $closure-class/Calculator $closure-class/Outer $closure-class/Inner $closure-class/Dog $closure-class/Animal $~lib/function/Function<%28%29=>~lib/string/String> $closure-class/EventEmitter $~lib/array/Array<%28i32%29=>void> $closure-class/DataProcessor $closure-class/QueryBuilder $~lib/function/Function<%28~lib/string/String%29=>void> $closure-class/StateMachine $~lib/function/Function<%28%29=>bool> $closure-class/Observable $~lib/array/Array<%28i32%2Ci32%29=>void> $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void> $closure-class/ObserverState $~lib/function/Function<%28i32%2Ci32%29=>void> $closure-class/Box $~lib/function/Function<%28%28i32%29=>i32%29=>void> $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box> $~lib/function/Function<%28i32%29=>closure-class/Box> $closure-class/ChainableCounter $~lib/function/Function<%28%29=>closure-class/ChainableCounter> $closure-class/Task $~lib/function/Function<%28%28i32%29=>void%29=>void> $closure-class/Resource $~lib/function/Function<%28%28%29=>i32%29=>i32> $closure-class/TreeNode $~lib/array/Array $closure-class/Range $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/Outer~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/Dog~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Animal~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/EventEmitter~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-class/QueryBuilder~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Observable~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%2Ci32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-class/Box>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/Task~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $closure-class/TreeNode~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>~lib/string/String>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%29=>void>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%2Ci32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28i32%2Ci32%29=>void>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%2Ci32%29=>void%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>closure-class/Box%29=>closure-class/Box>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>closure-class/Box>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>closure-class/Box>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>closure-class/ChainableCounter>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28i32%29=>void%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28i32%29=>void%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%28%29=>i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%28%29=>i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure-class.json b/tests/compiler/closure-class.json new file mode 100644 index 0000000000..454738fb3d --- /dev/null +++ b/tests/compiler/closure-class.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--enable", "closures" + ] +} diff --git a/tests/compiler/closure-class.release.wat b/tests/compiler/closure-class.release.wat new file mode 100644 index 0000000000..aa7bab6727 --- /dev/null +++ b/tests/compiler/closure-class.release.wat @@ -0,0 +1,9992 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32))) + (type $2 (func (param i32) (result i32))) + (type $3 (func)) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32 i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) + (type $8 (func (param i32 i32 i32))) + (type $9 (func (param i32 i32 i64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36860)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $4 (i32.const 1228) "<") + (data $4.1 (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $5 (i32.const 1292) ",") + (data $5.1 (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $7 (i32.const 1372) "<") + (data $7.1 (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $8 (i32.const 1436) "\1c") + (data $8.1 (i32.const 1448) "\05\00\00\00\08\00\00\00\01") + (data $9 (i32.const 1468) "\1c") + (data $9.1 (i32.const 1480) "\06\00\00\00\08\00\00\00\02") + (data $10 (i32.const 1500) "<") + (data $10.1 (i32.const 1512) "\02\00\00\00 \00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00l\00a\00s\00s\00.\00t\00s") + (data $11 (i32.const 1564) "\1c") + (data $11.1 (i32.const 1576) "\08\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1596) "\1c") + (data $12.1 (i32.const 1608) "\t\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1628) "\1c") + (data $13.1 (i32.const 1640) "\06\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1660) "\1c") + (data $14.1 (i32.const 1672) "\06\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1692) "\1c") + (data $15.1 (i32.const 1704) "\06\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1724) "\1c") + (data $16.1 (i32.const 1736) "\06\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1756) "\1c") + (data $17.1 (i32.const 1768) "\08\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1788) "\1c") + (data $18.1 (i32.const 1800) "\02\00\00\00\06\00\00\00R\00e\00x") + (data $19 (i32.const 1820) "<") + (data $19.1 (i32.const 1832) "\02\00\00\00\1e\00\00\00G\00e\00r\00m\00a\00n\00 \00S\00h\00e\00p\00h\00e\00r\00d") + (data $20 (i32.const 1884) "\1c") + (data $20.1 (i32.const 1896) "\06\00\00\00\08\00\00\00\n") + (data $21 (i32.const 1916) "\1c") + (data $21.1 (i32.const 1928) "\05\00\00\00\08\00\00\00\0b") + (data $22 (i32.const 1948) "\1c") + (data $22.1 (i32.const 1960) "\0f\00\00\00\08\00\00\00\0c") + (data $23 (i32.const 1980) ",") + (data $23.1 (i32.const 1992) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $24 (i32.const 2028) ",") + (data $24.1 (i32.const 2040) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $25 (i32.const 2076) "\1c") + (data $25.1 (i32.const 2088) "\08\00\00\00\08\00\00\00\r") + (data $26 (i32.const 2108) "|") + (data $26.1 (i32.const 2120) "\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data $27 (i32.const 2236) "\1c") + (data $27.1 (i32.const 2248) "\02\00\00\00\02\00\00\00*") + (data $28 (i32.const 2268) "\1c") + (data $28.1 (i32.const 2280) "\02") + (data $29 (i32.const 2300) "\1c") + (data $29.1 (i32.const 2312) "\14\00\00\00\08\00\00\00\0e") + (data $30 (i32.const 2332) "\1c") + (data $30.1 (i32.const 2344) "\14\00\00\00\08\00\00\00\0f") + (data $31 (i32.const 2364) "\1c") + (data $31.1 (i32.const 2376) "\14\00\00\00\08\00\00\00\10") + (data $32 (i32.const 2396) ",") + (data $32.1 (i32.const 2408) "\02\00\00\00\0e\00\00\00S\00E\00L\00E\00C\00T\00 ") + (data $33 (i32.const 2444) "\1c") + (data $33.1 (i32.const 2456) "\02\00\00\00\0c\00\00\00 \00F\00R\00O\00M\00 ") + (data $34 (i32.const 2476) ",") + (data $34.1 (i32.const 2488) "\02\00\00\00\0e\00\00\00 \00W\00H\00E\00R\00E\00 ") + (data $35 (i32.const 2524) "\1c") + (data $35.1 (i32.const 2536) "\0f\00\00\00\08\00\00\00\11") + (data $36 (i32.const 2556) ",") + (data $36.1 (i32.const 2568) "\02\00\00\00\10\00\00\00i\00d\00,\00 \00n\00a\00m\00e") + (data $37 (i32.const 2604) "\1c") + (data $37.1 (i32.const 2616) "\02\00\00\00\n\00\00\00u\00s\00e\00r\00s") + (data $38 (i32.const 2636) ",") + (data $38.1 (i32.const 2648) "\02\00\00\00\14\00\00\00a\00c\00t\00i\00v\00e\00 \00=\00 \001") + (data $39 (i32.const 2684) "l") + (data $39.1 (i32.const 2696) "\02\00\00\00V\00\00\00S\00E\00L\00E\00C\00T\00 \00i\00d\00,\00 \00n\00a\00m\00e\00 \00F\00R\00O\00M\00 \00u\00s\00e\00r\00s\00 \00W\00H\00E\00R\00E\00 \00a\00c\00t\00i\00v\00e\00 \00=\00 \001") + (data $40 (i32.const 2796) "\1c") + (data $40.1 (i32.const 2808) "\16\00\00\00\08\00\00\00\12") + (data $41 (i32.const 2828) "\1c") + (data $41.1 (i32.const 2840) "\16\00\00\00\08\00\00\00\13") + (data $42 (i32.const 2860) "\1c") + (data $42.1 (i32.const 2872) "\16\00\00\00\08\00\00\00\14") + (data $43 (i32.const 2892) "\1c") + (data $43.1 (i32.const 2904) "\05\00\00\00\08\00\00\00\15") + (data $44 (i32.const 2924) "\1c") + (data $44.1 (i32.const 2936) "\06\00\00\00\08\00\00\00\16") + (data $45 (i32.const 2956) "\1c") + (data $45.1 (i32.const 2968) "\19\00\00\00\08\00\00\00\17") + (data $46 (i32.const 2988) "\1c") + (data $46.1 (i32.const 3000) "\08\00\00\00\08\00\00\00\18") + (data $47 (i32.const 3020) "\1c") + (data $47.1 (i32.const 3032) "\06\00\00\00\08\00\00\00\19") + (data $48 (i32.const 3052) "\1c") + (data $48.1 (i32.const 3064) "\1b\00\00\00\08\00\00\00\1a") + (data $49 (i32.const 3084) "\1c") + (data $49.1 (i32.const 3096) "\1b\00\00\00\08\00\00\00\1b") + (data $50 (i32.const 3116) "\1c") + (data $50.1 (i32.const 3128) "\1d\00\00\00\08\00\00\00\1c") + (data $51 (i32.const 3148) "\1c") + (data $51.1 (i32.const 3160) "\06\00\00\00\08\00\00\00\1d") + (data $52 (i32.const 3180) "\1c") + (data $52.1 (i32.const 3192) "\1e\00\00\00\08\00\00\00\1e") + (data $53 (i32.const 3212) "\1c") + (data $53.1 (i32.const 3224) "\1e\00\00\00\08\00\00\00\1f") + (data $54 (i32.const 3244) "\1c") + (data $54.1 (i32.const 3256) "\1e\00\00\00\08\00\00\00 ") + (data $55 (i32.const 3276) "\1c") + (data $55.1 (i32.const 3288) "\1f\00\00\00\08\00\00\00!") + (data $56 (i32.const 3308) "\1c") + (data $56.1 (i32.const 3320) " \00\00\00\08\00\00\00\"") + (data $57 (i32.const 3340) "\1c") + (data $57.1 (i32.const 3352) "\"\00\00\00\08\00\00\00#") + (data $58 (i32.const 3372) "\1c") + (data $58.1 (i32.const 3384) "\"\00\00\00\08\00\00\00$") + (data $59 (i32.const 3404) "\1c") + (data $59.1 (i32.const 3416) "$\00\00\00\08\00\00\00%") + (data $60 (i32.const 3436) "\1c") + (data $60.1 (i32.const 3448) "\08\00\00\00\08\00\00\00&") + (data $61 (i32.const 3468) "\1c") + (data $61.1 (i32.const 3480) "\08\00\00\00\08\00\00\00\'") + (data $62 (i32.const 3500) "\1c") + (data $62.1 (i32.const 3512) "\08\00\00\00\08\00\00\00(") + (data $63 (i32.const 3532) "\1c") + (data $63.1 (i32.const 3544) "\16\00\00\00\08\00\00\00)") + (data $64 (i32.const 3564) "\1c") + (data $64.1 (i32.const 3576) "\16\00\00\00\08\00\00\00*") + (data $65 (i32.const 3596) "\1c") + (data $65.1 (i32.const 3608) "&\00\00\00\08\00\00\00+") + (data $66 (i32.const 3628) "\1c") + (data $66.1 (i32.const 3640) "\06\00\00\00\08\00\00\00,") + (data $67 (i32.const 3660) "\1c") + (data $67.1 (i32.const 3672) "\06\00\00\00\08\00\00\00-") + (data $68 (i32.const 3692) "\1c") + (data $68.1 (i32.const 3704) "\06\00\00\00\08\00\00\00.") + (data $69 (i32.const 3724) "\1c") + (data $69.1 (i32.const 3736) "\06\00\00\00\08\00\00\00/") + (data $70 (i32.const 3756) "\1c") + (data $70.1 (i32.const 3768) "\06\00\00\00\08\00\00\000") + (data $71 (i32.const 3788) "\1c") + (data $71.1 (i32.const 3800) "\06\00\00\00\08\00\00\001") + (data $72 (i32.const 3820) "\1c") + (data $72.1 (i32.const 3832) "\06\00\00\00\08\00\00\002") + (data $73 (i32.const 3852) "\1c") + (data $73.1 (i32.const 3864) "\16\00\00\00\08\00\00\003") + (data $74 (i32.const 3884) "\1c") + (data $74.1 (i32.const 3896) "\06\00\00\00\08\00\00\004") + (data $75 (i32.const 3920) "*\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") + (data $75.1 (i32.const 3952) " ") + (data $75.2 (i32.const 3964) " \00\00\00\00\00\00\00 ") + (data $75.3 (i32.const 3992) "\02A\00\00 ") + (data $75.4 (i32.const 4008) " ") + (data $75.5 (i32.const 4020) "\02A\00\00\00\00\00\00 \00\00\00\00\00\00\00 ") + (data $75.6 (i32.const 4056) " ") + (data $75.7 (i32.const 4072) " ") + (data $75.8 (i32.const 4084) "\02A\00\00 ") + (table $0 53 53 funcref) + (elem $0 (i32.const 1) $closure-class/Counter#getIncrementClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getDepositClosure~anonymous|0 $closure-class/BankAccount#getWithdrawClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Calculator#getOperationClosure~anonymous|0 $closure-class/Outer#getComputeClosure~anonymous|0 $closure-class/Outer#getInnerSetterClosure~anonymous|0 $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 $closure-class/Animal#getAgeIncrementClosure~anonymous|0 $closure-class/Dog#getBreedClosure~anonymous|0 $closure-class/DataProcessor#getProcessorClosure~anonymous|0 $closure-class/QueryBuilder#getSelectClosure~anonymous|0 $closure-class/QueryBuilder#getFromClosure~anonymous|0 $closure-class/QueryBuilder#getWhereClosure~anonymous|0 $closure-class/QueryBuilder#getBuildClosure~anonymous|0 $closure-class/StateMachine#getStartClosure~anonymous|0 $closure-class/StateMachine#getPauseClosure~anonymous|0 $closure-class/StateMachine#getStopClosure~anonymous|0 $closure-class/StateMachine#getResetClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/Observable#getSubscribeClosure~anonymous|0 $closure-class/Observable#getSetClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/ObserverState#getCountObserver~anonymous|0 $closure-class/ObserverState#getDiffObserver~anonymous|0 $closure-class/Box#getMapClosure~anonymous|0 $closure-class/Counter#getCountClosure~anonymous|0 $closure-class/testBoxMap~anonymous|0 $closure-class/testBoxMap~anonymous|1 $closure-class/testBoxMap~anonymous|2 $closure-class/Box#getFlatMapClosure~anonymous|0 $closure-class/testBoxFlatMap~anonymous|0 $closure-class/ChainableCounter#getAddClosure~anonymous|0 $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 $closure-class/Task#getThenClosure~anonymous|0 $closure-class/Task#getCompleteClosure~anonymous|0 $closure-class/testTaskCallbacks~anonymous|0 $closure-class/testTaskCallbackAfterComplete~anonymous|0 $closure-class/Resource#getAcquireClosure~anonymous|0 $closure-class/Resource#getReleaseClosure~anonymous|0 $closure-class/Resource#getUseClosure~anonymous|0 $closure-class/testResourceManagement~anonymous|0 $closure-class/testResourceManagement~anonymous|1 $closure-class/testResourceManagement~anonymous|2 $closure-class/testResourceManagement~anonymous|3 $closure-class/testResourceManagement~anonymous|0 $closure-class/TreeNode#getSumClosure~anonymous|0 $closure-class/TreeNode#getDepthClosure~anonymous|0 $closure-class/Range#getHasNextClosure~anonymous|0 $closure-class/Range#getNextClosure~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 36864 + i32.const 0 + i32.store + i32.const 38432 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 36864 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 36864 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 36864 + i32.const 38436 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 36864 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + memory.size + local.tee $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $1 + local.get $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/object/Object#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array<%28i32%29=>void>#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/TreeNode#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 39 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 40 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.tee $2 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + block $__inlined_func$~lib/string/String#concat$531 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.tee $4 + local.get $3 + i32.add + local.tee $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2288 + local.set $0 + br $__inlined_func$~lib/string/String#concat$531 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $2 + local.get $3 + memory.copy + local.get $0 + local.get $3 + i32.add + local.get $1 + local.get $4 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/array/Array<%28i32%29=>void>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1248 + i32.const 2048 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2128 + i32.const 2048 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/TreeNode#addChild (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getCountClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28i32%29=>void>#push (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + local.tee $7 + i32.const 1 + i32.add + local.tee $6 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $4 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $4 + i32.const 268435455 + i32.gt_u + if + i32.const 2000 + i32.const 2048 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$487 + i32.const 1073741820 + local.get $2 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.const 8 + local.get $4 + local.get $4 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $2 + local.get $2 + local.get $3 + i32.lt_u + select + local.tee $5 + local.get $0 + i32.load + local.tee $2 + i32.const 20 + i32.sub + local.tee $4 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $4 + local.get $5 + i32.store offset=16 + local.get $2 + local.set $3 + br $__inlined_func$~lib/rt/itcms/__renew$487 + end + local.get $5 + local.get $4 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $3 + local.get $2 + local.get $5 + local.get $4 + i32.load offset=16 + local.tee $4 + local.get $4 + local.get $5 + i32.gt_u + select + memory.copy + end + local.get $2 + local.get $3 + i32.ne + if + local.get $0 + local.get $3 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$524 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 36860 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$524 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 3920 + i32.load + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 3924 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner4 + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $closure-class/Range + block $closure-class/TreeNode + block $closure-class/Resource + block $closure-class/ChainableCounter + block $closure-class/Box + block $closure-class/ObserverState + block $closure-class/Observable + block $closure-class/StateMachine + block $closure-class/QueryBuilder + block $closure-class/DataProcessor + block $closure-class/Dog + block $closure-class/Inner + block $closure-class/Calculator + block $closure-class/BankAccount + block $closure-class/Counter + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner2 $closure-class/Counter $folding-inner0 $folding-inner0 $closure-class/BankAccount $folding-inner0 $folding-inner0 $closure-class/Calculator $folding-inner2 $closure-class/Inner $closure-class/Dog $folding-inner2 $folding-inner0 $folding-inner2 $folding-inner1 $closure-class/DataProcessor $closure-class/QueryBuilder $folding-inner0 $closure-class/StateMachine $folding-inner0 $closure-class/Observable $folding-inner1 $folding-inner0 $closure-class/ObserverState $folding-inner0 $closure-class/Box $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $closure-class/ChainableCounter $folding-inner0 $folding-inner3 $folding-inner0 $closure-class/Resource $folding-inner0 $closure-class/TreeNode $folding-inner1 $closure-class/Range $invalid + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + br $folding-inner3 + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + br $folding-inner3 + end + return + end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + return + end + return + end + return + end + return + end + return + end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + return + end + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + local.get $0 + i32.load offset=8 + call $~lib/rt/itcms/__visit + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/EventEmitter#emit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + local.get $3 + i32.load + call_indirect (type $1) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getIncrementClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Counter#getCountClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 2 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Counter#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/Calculator#getOperationClosure (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $4 + local.get $2 + i32.store offset=8 + local.get $4 + local.get $0 + i32.store offset=12 + local.get $4 + local.get $1 + i32.store offset=16 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 7 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Box#constructor (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 28 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + block $folding-inner0 + local.get $1 + i32.eqz + local.get $0 + i32.eqz + i32.or + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $3 + local.tee $0 + i32.const 4 + i32.ge_u + if (result i32) + local.get $2 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + else + i32.const 1 + end + i32.eqz + if + loop $do-loop|0 + local.get $2 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl$197 + loop $while-continue|1 + local.get $0 + local.tee $3 + i32.const 1 + i32.sub + local.set $0 + local.get $3 + if + local.get $2 + i32.load16_u + local.tee $5 + local.get $1 + i32.load16_u + local.tee $4 + i32.sub + local.set $3 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl$197 + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $3 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.eqz + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1248 + call $~lib/rt/itcms/__visit + i32.const 2000 + call $~lib/rt/itcms/__visit + i32.const 2128 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/array/Array<%28i32%29=>void>#constructor (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/testResourceManagement~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-class/TreeNode#getSumClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 49 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/TreeNode#getDepthClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 50 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Task#getThenClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 36 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 37 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Task#getCompleteClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 38 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Task#constructor (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 35 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/Resource#getUseCount (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Range#getNextClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 52 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Range#getHasNextClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 51 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/Range#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 41 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-class/EventEmitter#addListener (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/DataProcessor#getProcessorClosure (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 13 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/DataProcessor#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/ChainableCounter#getAddClosure (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $3 + local.get $0 + i32.store offset=8 + local.get $3 + local.get $1 + i32.store offset=12 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 35 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + ) + (func $closure-class/BankAccount#getTransactionCountClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:closure-class + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 36860 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 36860 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 36860 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $start:closure-class + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + memory.size + i32.const 16 + i32.shl + i32.const 36860 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store + i32.const 1176 + i32.const 1168 + i32.store + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store + i32.const 1352 + i32.const 1344 + i32.store + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getIncrementClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getCountClosure + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + call $closure-class/Counter#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getIncrementClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Counter#getIncrementClosure + local.tee $3 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Counter#getCountClosure + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Counter#getCountClosure + local.tee $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=32 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=36 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=40 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=44 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.mul + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=52 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 32 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testBankAccount + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 125 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 5 + i32.const 0 + call $closure-class/Calculator#getOperationClosure + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 2 + i32.const 1 + call $closure-class/Calculator#getOperationClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 3 + i32.const 2 + call $closure-class/Calculator#getOperationClosure + local.tee $3 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=32 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 168 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 10 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 8 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 9 + i32.store + local.get $1 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 20 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 226 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1808 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1808 + i32.store offset=8 + local.get $0 + i32.const 1808 + i32.store + local.get $0 + i32.const 1808 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 1840 + i32.store offset=8 + local.get $0 + i32.const 1840 + i32.store offset=8 + local.get $0 + i32.const 1840 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 10 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 11 + i32.store + local.get $4 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 12 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 277 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1840 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 278 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=36 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 285 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testEventEmitterPattern + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 345 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2256 + i32.store + local.get $1 + i32.const 2256 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2288 + i32.store offset=8 + local.get $1 + i32.const 2288 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 14 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 15 + i32.store + local.get $4 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 20 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 16 + i32.store + local.get $5 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 17 + i32.store + local.get $1 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 2576 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 2624 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=32 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 2656 + local.get $5 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=36 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + call_indirect (type $0) + local.tee $0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2704 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 399 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + call $closure-class/testStateMachine + if + i32.const 0 + i32.const 1520 + i32.const 486 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testObservable + i32.const 43 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 562 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/Box#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 29 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 28 + i32.store + local.get $3 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 29 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 3200 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3200 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3232 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 3264 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3264 + local.get $3 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 169 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 604 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/Box#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 31 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 33 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 3328 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + i32.const 3328 + local.get $0 + i32.load + call_indirect (type $2) + local.tee $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 615 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 33 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 5 + call $closure-class/ChainableCounter#getAddClosure + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 10 + call $closure-class/ChainableCounter#getAddClosure + local.tee $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 0 + i32.store offset=4 + local.get $4 + local.get $1 + i32.store offset=8 + local.get $4 + i32.const 2 + i32.store offset=12 + i32.const 8 + i32.const 34 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 36 + i32.store + local.get $5 + local.get $4 + i32.const 4 + i32.add + i32.store offset=4 + local.get $5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 35 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/Task#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getThenClosure + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getCompleteClosure + local.tee $3 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 39 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + local.get $2 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + if + i32.const 0 + i32.const 1520 + i32.const 711 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 21 + local.get $3 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 715 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load8_u + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 716 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 720 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/Task#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getThenClosure + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $closure-class/Task#getCompleteClosure + local.tee $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 50 + local.get $1 + i32.load + call_indirect (type $1) + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 40 + i32.store + local.get $1 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + local.get $2 + i32.load + call_indirect (type $1) + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 738 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-class/testResourceManagement + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 814 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-class/TreeNode#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $closure-class/TreeNode#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $closure-class/TreeNode#constructor + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $closure-class/TreeNode#constructor + local.tee $3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $closure-class/TreeNode#constructor + local.tee $4 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 6 + call $closure-class/TreeNode#constructor + local.tee $5 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $0 + local.get $1 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $0 + local.get $2 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $1 + local.get $3 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $1 + local.get $4 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $2 + local.get $5 + call $closure-class/TreeNode#addChild + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/TreeNode#getSumClosure + local.tee $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/TreeNode#getDepthClosure + local.tee $0 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=40 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 21 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 884 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=44 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=48 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 100 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2103 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 889 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + i32.const 1 + call $closure-class/Range#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getHasNextClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getNextClosure + local.tee $2 + i32.store offset=12 + i32.const 0 + local.set $0 + loop $while-continue|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 944 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + i32.const 0 + i32.const -2 + call $closure-class/Range#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getHasNextClosure + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $closure-class/Range#getNextClosure + local.tee $2 + i32.store offset=12 + i32.const 0 + local.set $0 + loop $while-continue|01 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + br $while-continue|01 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 959 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/testTaskCallbacks~anonymous|0 (param $0 i32) + global.get $~lib/__closure_env + local.get $0 + i32.const 1 + i32.shl + i32.store offset=4 + ) + (func $closure-class/testTaskCallbackAfterComplete~anonymous|0 (param $0 i32) + global.get $~lib/__closure_env + local.get $0 + i32.store offset=4 + ) + (func $closure-class/testStateMachine (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 84 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 21 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $0 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 18 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 19 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $2 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 20 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + local.get $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 21 + i32.store + local.get $3 + local.get $6 + i32.store offset=4 + local.get $3 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $6 + i32.const 4 + i32.add + local.tee $7 + i32.const 0 + i32.store + local.get $6 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 22 + i32.store + local.get $4 + local.get $7 + i32.store offset=4 + local.get $4 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 463 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 465 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=36 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 466 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=40 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 468 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=44 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 470 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=48 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 471 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 473 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=56 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 474 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=60 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 476 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=64 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 477 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=68 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 479 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=72 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=76 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 482 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=80 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 84 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/testResourceManagement~anonymous|3 (result i32) + i32.const 30 + ) + (func $closure-class/testResourceManagement~anonymous|2 (result i32) + i32.const 20 + ) + (func $closure-class/testResourceManagement~anonymous|1 (result i32) + i32.const 10 + ) + (func $closure-class/testResourceManagement (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 56 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 37 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 41 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 22 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 42 + i32.store + local.get $2 + local.get $4 + i32.store offset=4 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 38 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 43 + i32.store + local.get $4 + local.get $5 + i32.store offset=4 + local.get $4 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 3648 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3648 + local.get $4 + i32.load + call_indirect (type $2) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 792 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 795 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 796 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3680 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3680 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 799 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3712 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=36 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3712 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 800 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3744 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=40 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3744 + local.get $4 + i32.load + call_indirect (type $2) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 801 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $closure-class/Resource#getUseCount + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 803 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 806 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=48 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1520 + i32.const 807 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3776 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3776 + local.get $4 + i32.load + call_indirect (type $2) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 810 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $closure-class/Resource#getUseCount + global.get $~lib/memory/__stack_pointer + i32.const 56 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/testObservable (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.add + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 23 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 24 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $2 + local.get $3 + i32.store + local.get $2 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 25 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 23 + i32.store + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 24 + i32.store + local.get $0 + local.get $4 + i32.store offset=4 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + local.get $1 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 25 + i32.store + local.get $1 + local.get $5 + i32.store offset=4 + local.get $1 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 26 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + call $~lib/object/Object#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 26 + i32.store + local.get $3 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $3 + local.get $4 + i32.store offset=8 + i32.const 8 + i32.const 27 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 27 + i32.store + local.get $3 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=40 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=44 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 25 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 20 + local.get $0 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=56 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 556 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 557 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 558 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=60 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load + i32.add + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.sub + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/testEventEmitterPattern (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 16 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + call $~lib/array/Array<%28i32%29=>void>#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + call $closure-class/DataProcessor#constructor + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + call $closure-class/DataProcessor#constructor + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + local.get $0 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $1 + local.get $3 + call $closure-class/EventEmitter#addListener + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $2 + call $closure-class/DataProcessor#getProcessorClosure + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $1 + local.get $3 + call $closure-class/EventEmitter#addListener + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 10 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 20 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.const 30 + call $closure-class/EventEmitter#emit + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 336 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 337 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=8 + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 338 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=8 + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 339 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 340 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 341 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=8 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/testBoxMap~anonymous|2 (param $0 i32) (result i32) + local.get $0 + local.get $0 + i32.mul + ) + (func $closure-class/testBoxMap~anonymous|1 (param $0 i32) (result i32) + local.get $0 + i32.const 3 + i32.add + ) + (func $closure-class/testBoxMap~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 1 + i32.shl + ) + (func $closure-class/testBoxFlatMap~anonymous|0 (param $0 i32) (result i32) + local.get $0 + i32.const 10 + i32.mul + call $closure-class/Box#constructor + ) + (func $closure-class/testBankAccount (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 68 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 100 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 3 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 4 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 5 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + local.get $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $5 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $5 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 6 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + local.get $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=24 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 50 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 150 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 111 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 30 + local.get $1 + i32.load + call_indirect (type $2) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 113 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=36 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 114 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=40 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 200 + local.get $1 + i32.load + call_indirect (type $2) + if + i32.const 0 + i32.const 1520 + i32.const 116 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 117 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 118 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 100 + local.get $4 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=56 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 220 + local.get $1 + i32.load + call_indirect (type $2) + i32.eqz + if + i32.const 0 + i32.const 1520 + i32.const 121 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=60 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 1000 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=64 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 68 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-class/TreeNode#getSumClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $1 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + local.get $4 + local.get $1 + call $~lib/array/Array<%28i32%29=>void>#__get + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-class/TreeNode#getSumClosure + local.tee $3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/TreeNode#getDepthClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $3 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#get:length + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $4 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $closure-class/TreeNode#getDepthClosure + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + local.get $0 + i32.load + call_indirect (type $0) + local.tee $0 + i32.lt_s + if + local.get $0 + local.set $1 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + i32.add + ) + (func $closure-class/Task#getThenClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + else + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $1 + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#push + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Task#getCompleteClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + i32.const 1 + i32.store8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + local.get $0 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + local.get $3 + i32.load + call_indirect (type $1) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/StateMachine#getStopClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 1 + i32.eq + if (result i32) + i32.const 1 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 2 + i32.eq + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/StateMachine#getStartClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 2 + i32.eq + else + i32.const 1 + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/StateMachine#getResetClosure~anonymous|0 + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/StateMachine#getPauseClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/Resource#getUseClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $2 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $closure-class/Resource#getReleaseClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load8_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/Resource#getAcquireClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load8_u + i32.eqz + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/Range#getNextClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $3 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $3 + local.get $1 + i32.load offset=8 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Range#getHasNextClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load offset=8 + i32.const 0 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.lt_s + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.gt_s + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getWhereClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getSelectClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getFromClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/QueryBuilder#getBuildClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load + local.tee $2 + i32.store offset=12 + i32.const 2416 + local.get $2 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.const 2464 + call $~lib/string/String.__concat + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/string/String.__concat + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $2 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store offset=8 + i32.const 2496 + local.get $1 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/string/String.__concat + local.tee $0 + i32.store offset=20 + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-class/Outer#getInnerSetterClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + local.tee $1 + i32.store + local.get $1 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Outer#getComputeClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + local.tee $1 + i32.store + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getDiffObserver~anonymous|0 (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $3 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + i32.load offset=4 + local.get $1 + local.get $0 + i32.sub + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ObserverState#getCountObserver~anonymous|0 (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Observable#getSubscribeClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + call $~lib/array/Array<%28i32%29=>void>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Observable#getSetClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store + local.get $4 + local.get $0 + i32.store + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store + local.get $4 + call $~lib/array/Array<%28i32%29=>void>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + local.get $2 + call $~lib/array/Array<%28i32%29=>void>#__get + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + local.get $0 + local.get $4 + i32.load + call_indirect (type $4) + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Dog#getBreedClosure~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/DataProcessor#getProcessorClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $1 + local.get $3 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $0 + local.get $2 + i32.load offset=8 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Counter#getIncrementClosure~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ChainableCounter#getMultiplyClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.load + local.get $1 + i32.load offset=8 + i32.mul + i32.store + local.get $1 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/ChainableCounter#getAddClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.load + local.get $1 + i32.load offset=8 + i32.add + i32.store + local.get $1 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Calculator#getOperationClosure~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + if + local.get $1 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=12 + i32.sub + i32.store + else + local.get $0 + i32.load offset=4 + i32.const 2 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=12 + i32.mul + i32.store + end + end + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $2 + i32.store offset=4 + local.get $1 + local.get $2 + i32.load + local.get $0 + i32.load offset=12 + i32.add + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Box#getMapClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + local.get $2 + local.get $0 + i32.load + call_indirect (type $2) + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Box#getFlatMapClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store offset=8 + local.get $1 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/BankAccount#getWithdrawClosure~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $0 + local.get $2 + i32.load + i32.le_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $3 + i32.store offset=4 + local.get $2 + local.get $3 + i32.load + local.get $0 + i32.sub + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $closure-class/BankAccount#getDepositClosure~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $3 + local.get $0 + local.get $1 + i32.load + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-class/Animal#getAgeIncrementClosure~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4092 + i32.lt_s + if + i32.const 36880 + i32.const 36928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure-class.ts b/tests/compiler/closure-class.ts new file mode 100644 index 0000000000..988238bcef --- /dev/null +++ b/tests/compiler/closure-class.ts @@ -0,0 +1,964 @@ +// ============================================================================= +// CLOSURE CLASS TEST +// ============================================================================= + +// ============================================================================= +// SECTION 1: Basic Method Closures Capturing "this" directly +// ============================================================================= + +class Counter { + count: i32 = 0; + + increment(): void { + this.count++; + } + + getIncrementClosure(): () => void { + return (): void => { + this.count++; + }; + } + + getCount(): i32 { + return this.count; + } + + getCountClosure(): () => i32 { + return (): i32 => this.count; + } +} + +// Test 1.1: Basic this capture in closure +function testBasicThisCapture(): i32 { + let c = new Counter(); + let inc = c.getIncrementClosure(); + let get = c.getCountClosure(); + + inc(); + inc(); + inc(); + + return get(); +} +assert(testBasicThisCapture() == 3); + +// Test 1.2: Multiple instances with their own closures +function testMultipleInstances(): i32 { + let c1 = new Counter(); + let c2 = new Counter(); + + let inc1 = c1.getIncrementClosure(); + let inc2 = c2.getIncrementClosure(); + let get1 = c1.getCountClosure(); + let get2 = c2.getCountClosure(); + + inc1(); inc1(); inc1(); // c1.count = 3 + inc2(); inc2(); // c2.count = 2 + + return get1() * 10 + get2(); // 30 + 2 = 32 +} +assert(testMultipleInstances() == 32); + +// ============================================================================= +// SECTION 2: Complex State Management with Closures +// ============================================================================= + +class BankAccount { + private balance: i32; + private transactionCount: i32 = 0; + + constructor(initialBalance: i32) { + this.balance = initialBalance; + } + + getDepositClosure(): (amount: i32) => void { + return (amount: i32): void => { + this.balance += amount; + this.transactionCount++; + }; + } + + getWithdrawClosure(): (amount: i32) => bool { + return (amount: i32): bool => { + if (this.balance >= amount) { + this.balance -= amount; + this.transactionCount++; + return true; + } + return false; + }; + } + + getBalanceClosure(): () => i32 { + return (): i32 => this.balance; + } + + getTransactionCountClosure(): () => i32 { + return (): i32 => this.transactionCount; + } +} + +// Test 2.1: Bank account operations +function testBankAccount(): i32 { + let account = new BankAccount(100); + + let deposit = account.getDepositClosure(); + let withdraw = account.getWithdrawClosure(); + let getBalance = account.getBalanceClosure(); + let getTxCount = account.getTransactionCountClosure(); + + deposit(50); // balance = 150, txCount = 1 + assert(getBalance() == 150); + + assert(withdraw(30) == true); // balance = 120, txCount = 2 + assert(getBalance() == 120); + + assert(withdraw(200) == false); // insufficient funds, txCount still 2 + assert(getBalance() == 120); + assert(getTxCount() == 2); + + deposit(100); // balance = 220, txCount = 3 + assert(withdraw(220) == true); // balance = 0, txCount = 4 + + return getBalance() * 1000 + getTxCount(); // 0 * 1000 + 4 = 4 +} +assert(testBankAccount() == 4); + +// ============================================================================= +// SECTION 3: Closure Capturing Both "this" and Local Variables +// ============================================================================= + +class Calculator { + result: i32 = 0; + + getOperationClosure(operand: i32, operation: i32): () => i32 { + // Captures both 'this' and parameters 'operand' and 'operation' + return (): i32 => { + if (operation == 0) { // add + this.result += operand; + } else if (operation == 1) { // subtract + this.result -= operand; + } else if (operation == 2) { // multiply + this.result *= operand; + } + return this.result; + }; + } + + reset(): void { + this.result = 0; + } +} + +// Test 3.1: Calculator with mixed captures +function testCalculatorClosures(): i32 { + let calc = new Calculator(); + + let addFive = calc.getOperationClosure(5, 0); + let subtractTwo = calc.getOperationClosure(2, 1); + let multiplyThree = calc.getOperationClosure(3, 2); + + addFive(); // result = 5 + addFive(); // result = 10 + subtractTwo(); // result = 8 + multiplyThree(); // result = 24 + + return calc.result; +} +assert(testCalculatorClosures() == 24); + +// ============================================================================= +// SECTION 4: Nested Classes with Closures +// ============================================================================= + +class Inner { + value: i32; + + constructor(v: i32) { + this.value = v; + } + + getValueClosure(): () => i32 { + return (): i32 => this.value; + } + + getSetterClosure(): (v: i32) => void { + return (v: i32): void => { + this.value = v; + }; + } +} + +class Outer { + inner: Inner; + multiplier: i32; + + constructor(innerValue: i32, mult: i32) { + this.inner = new Inner(innerValue); + this.multiplier = mult; + } + + getComputeClosure(): () => i32 { + // Captures this, which has access to inner + return (): i32 => this.inner.value * this.multiplier; + } + + getInnerSetterClosure(): (v: i32) => void { + return (v: i32): void => { + this.inner.value = v; + }; + } +} + +// Test 4.1: Nested object access through closures +function testNestedClosures(): i32 { + let outer = new Outer(10, 3); + let compute = outer.getComputeClosure(); + let setInner = outer.getInnerSetterClosure(); + + assert(compute() == 30); // 10 * 3 + + setInner(20); + assert(compute() == 60); // 20 * 3 + + return compute(); +} +assert(testNestedClosures() == 60); + +// ============================================================================= +// SECTION 5: Closures with Inheritance +// ============================================================================= + +class Animal { + name: string; + age: i32; + + constructor(name: string, age: i32) { + this.name = name; + this.age = age; + } + + getAgeClosure(): () => i32 { + return (): i32 => this.age; + } + + getAgeIncrementClosure(): () => void { + return (): void => { + this.age++; + }; + } +} + +class Dog extends Animal { + breed: string; + + constructor(name: string, age: i32, breed: string) { + super(name, age); + this.breed = breed; + } + + getBreedClosure(): () => string { + return (): string => this.breed; + } + + getFullInfoClosure(): () => string { + return (): string => this.name + " (" + this.breed + ")"; + } +} + +// Test 5.1: Inheritance with closures +function testInheritanceClosures(): i32 { + let dog = new Dog("Rex", 3, "German Shepherd"); + + let getAge = dog.getAgeClosure(); + let incAge = dog.getAgeIncrementClosure(); + let getBreed = dog.getBreedClosure(); + + assert(getAge() == 3); + assert(getBreed() == "German Shepherd"); + + incAge(); + incAge(); + + return getAge(); // 5 +} +assert(testInheritanceClosures() == 5); + +// ============================================================================= +// SECTION 6: Factory Pattern with Closures +// ============================================================================= + +class EventEmitter { + private listeners: Array<(data: i32) => void> = new Array<(data: i32) => void>(); + + addListener(listener: (data: i32) => void): void { + this.listeners.push(listener); + } + + emit(data: i32): void { + for (let i = 0; i < this.listeners.length; i++) { + this.listeners[i](data); + } + } + + getListenerCount(): i32 { + return this.listeners.length; + } +} + +class DataProcessor { + processedCount: i32 = 0; + lastValue: i32 = 0; + sum: i32 = 0; + + getProcessorClosure(): (data: i32) => void { + return (data: i32): void => { + this.processedCount++; + this.lastValue = data; + this.sum += data; + }; + } +} + +// Test 6.1: Event emitter pattern with closures +function testEventEmitterPattern(): i32 { + let emitter = new EventEmitter(); + let processor1 = new DataProcessor(); + let processor2 = new DataProcessor(); + + emitter.addListener(processor1.getProcessorClosure()); + emitter.addListener(processor2.getProcessorClosure()); + + emitter.emit(10); + emitter.emit(20); + emitter.emit(30); + + assert(processor1.processedCount == 3); + assert(processor2.processedCount == 3); + assert(processor1.sum == 60); + assert(processor2.sum == 60); + assert(processor1.lastValue == 30); + assert(processor2.lastValue == 30); + + return processor1.sum + processor2.sum; // 120 +} +assert(testEventEmitterPattern() == 120); + +// ============================================================================= +// SECTION 7: Builder Pattern with Closures +// ============================================================================= + +class QueryBuilder { + private selectFields: string = "*"; + private tableName: string = ""; + private whereClause: string = ""; + + getSelectClosure(): (fields: string) => void { + return (fields: string): void => { + this.selectFields = fields; + }; + } + + getFromClosure(): (table: string) => void { + return (table: string): void => { + this.tableName = table; + }; + } + + getWhereClosure(): (clause: string) => void { + return (clause: string): void => { + this.whereClause = clause; + }; + } + + getBuildClosure(): () => string { + return (): string => { + let query = "SELECT " + this.selectFields + " FROM " + this.tableName; + if (this.whereClause.length > 0) { + query += " WHERE " + this.whereClause; + } + return query; + }; + } +} + +// Test 7.1: Builder pattern with closures +function testBuilderPattern(): bool { + let builder = new QueryBuilder(); + + let select = builder.getSelectClosure(); + let from = builder.getFromClosure(); + let where = builder.getWhereClosure(); + let build = builder.getBuildClosure(); + + select("id, name"); + from("users"); + where("active = 1"); + + let query = build(); + assert(query == "SELECT id, name FROM users WHERE active = 1"); + + return true; +} +assert(testBuilderPattern() == true); + +// ============================================================================= +// SECTION 8: State Machine with Closures +// ============================================================================= + +class StateMachine { + private state: i32 = 0; // 0=idle, 1=running, 2=paused, 3=stopped + + getStartClosure(): () => bool { + return (): bool => { + if (this.state == 0 || this.state == 2) { + this.state = 1; + return true; + } + return false; + }; + } + + getPauseClosure(): () => bool { + return (): bool => { + if (this.state == 1) { + this.state = 2; + return true; + } + return false; + }; + } + + getStopClosure(): () => bool { + return (): bool => { + if (this.state == 1 || this.state == 2) { + this.state = 3; + return true; + } + return false; + }; + } + + getResetClosure(): () => void { + return (): void => { + this.state = 0; + }; + } + + getStateClosure(): () => i32 { + return (): i32 => this.state; + } +} + +// Test 8.1: State machine transitions +function testStateMachine(): i32 { + let sm = new StateMachine(); + + let start = sm.getStartClosure(); + let pause = sm.getPauseClosure(); + let stop = sm.getStopClosure(); + let reset = sm.getResetClosure(); + let getState = sm.getStateClosure(); + + assert(getState() == 0); // idle + + assert(start() == true); + assert(getState() == 1); // running + + assert(start() == false); // already running + + assert(pause() == true); + assert(getState() == 2); // paused + + assert(start() == true); // can restart from paused + assert(getState() == 1); // running again + + assert(stop() == true); + assert(getState() == 3); // stopped + + assert(start() == false); // can't start from stopped + + reset(); + assert(getState() == 0); // back to idle + + return getState(); +} +assert(testStateMachine() == 0); + +// ============================================================================= +// SECTION 9: Observable Pattern with Closures +// ============================================================================= + +class Observable { + private value: i32; + private observers: Array<(oldVal: i32, newVal: i32) => void> = new Array<(oldVal: i32, newVal: i32) => void>(); + + constructor(initial: i32) { + this.value = initial; + } + + getSubscribeClosure(): (observer: (oldVal: i32, newVal: i32) => void) => void { + return (observer: (oldVal: i32, newVal: i32) => void): void => { + this.observers.push(observer); + }; + } + + getSetClosure(): (newValue: i32) => void { + return (newValue: i32): void => { + let oldValue = this.value; + this.value = newValue; + for (let i = 0; i < this.observers.length; i++) { + this.observers[i](oldValue, newValue); + } + }; + } + + getGetClosure(): () => i32 { + return (): i32 => this.value; + } +} + +// Helper class for tracking observer state +class ObserverState { + changeCount: i32 = 0; + totalDiff: i32 = 0; + + getCountObserver(): (oldVal: i32, newVal: i32) => void { + return (oldVal: i32, newVal: i32): void => { + this.changeCount++; + }; + } + + getDiffObserver(): (oldVal: i32, newVal: i32) => void { + return (oldVal: i32, newVal: i32): void => { + this.totalDiff += newVal - oldVal; + }; + } +} + +// Test 9.1: Observable with multiple observers +function testObservable(): i32 { + let obs = new Observable(0); + + let subscribe = obs.getSubscribeClosure(); + let set = obs.getSetClosure(); + let get = obs.getGetClosure(); + + let state = new ObserverState(); + + subscribe(state.getCountObserver()); + subscribe(state.getDiffObserver()); + + set(10); // changeCount = 1, totalDiff = 10 + set(25); // changeCount = 2, totalDiff = 25 (10 + 15) + set(20); // changeCount = 3, totalDiff = 20 (25 - 5) + + assert(get() == 20); + assert(state.changeCount == 3); + assert(state.totalDiff == 20); + + return get() + state.changeCount + state.totalDiff; // 20 + 3 + 20 = 43 +} +assert(testObservable() == 43); + +// ============================================================================= +// SECTION 10: Complex Generic-like Patterns +// ============================================================================= + +class Box { + value: i32; + + constructor(v: i32) { + this.value = v; + } + + getMapClosure(): (fn: (v: i32) => i32) => void { + return (fn: (v: i32) => i32): void => { + this.value = fn(this.value); + }; + } + + getFlatMapClosure(): (fn: (v: i32) => Box) => Box { + return (fn: (v: i32) => Box): Box => { + return fn(this.value); + }; + } + + getValueClosure(): () => i32 { + return (): i32 => this.value; + } +} + +// Test 10.1: Functor-like map operation +function testBoxMap(): i32 { + let box = new Box(5); + let map = box.getMapClosure(); + let getValue = box.getValueClosure(); + + map((v: i32): i32 => v * 2); // 10 + map((v: i32): i32 => v + 3); // 13 + map((v: i32): i32 => v * v); // 169 + + return getValue(); +} +assert(testBoxMap() == 169); + +// Test 10.2: FlatMap with closure +function testBoxFlatMap(): i32 { + let box = new Box(5); + let flatMap = box.getFlatMapClosure(); + + let result = flatMap((v: i32): Box => new Box(v * 10)); + + return result.value; // 50 +} +assert(testBoxFlatMap() == 50); + +// ============================================================================= +// SECTION 11: Closure Chaining with This +// ============================================================================= + +class ChainableCounter { + count: i32 = 0; + + // Returns a closure that returns this for chaining + getAddClosure(amount: i32): () => ChainableCounter { + return (): ChainableCounter => { + this.count += amount; + return this; + }; + } + + getMultiplyClosure(factor: i32): () => ChainableCounter { + return (): ChainableCounter => { + this.count *= factor; + return this; + }; + } + + getResetClosure(): () => ChainableCounter { + return (): ChainableCounter => { + this.count = 0; + return this; + }; + } +} + +// Test 11.1: Method chaining through closures +function testClosureChaining(): i32 { + let counter = new ChainableCounter(); + + let add5 = counter.getAddClosure(5); + let add10 = counter.getAddClosure(10); + let mult2 = counter.getMultiplyClosure(2); + + add5(); // count = 5 + add10(); // count = 15 + mult2(); // count = 30 + add5(); // count = 35 + + return counter.count; +} +assert(testClosureChaining() == 35); + +// ============================================================================= +// SECTION 12: Callback-based Async-like Patterns +// ============================================================================= + +class Task { + private completed: bool = false; + private result: i32 = 0; + private callbacks: Array<(result: i32) => void> = new Array<(result: i32) => void>(); + + getThenClosure(): (callback: (result: i32) => void) => void { + return (callback: (result: i32) => void): void => { + if (this.completed) { + callback(this.result); + } else { + this.callbacks.push(callback); + } + }; + } + + getCompleteClosure(): (result: i32) => void { + return (result: i32): void => { + this.completed = true; + this.result = result; + for (let i = 0; i < this.callbacks.length; i++) { + this.callbacks[i](result); + } + }; + } + + isCompleted(): bool { + return this.completed; + } +} + +// Test 12.1: Promise-like pattern +function testTaskCallbacks(): i32 { + let task = new Task(); + let then = task.getThenClosure(); + let complete = task.getCompleteClosure(); + + let receivedValue: i32 = 0; + + // Register callback before completion + then((result: i32): void => { + receivedValue = result * 2; + }); + + assert(receivedValue == 0); // Not called yet + + complete(21); + + assert(receivedValue == 42); // Callback was called + assert(task.isCompleted() == true); + + return receivedValue; +} +assert(testTaskCallbacks() == 42); + +// Test 12.2: Register callback after completion +function testTaskCallbackAfterComplete(): i32 { + let task = new Task(); + let then = task.getThenClosure(); + let complete = task.getCompleteClosure(); + + complete(50); + + let receivedValue: i32 = 0; + then((result: i32): void => { + receivedValue = result; + }); + + // Should be called immediately since task is already complete + return receivedValue; +} +assert(testTaskCallbackAfterComplete() == 50); + +// ============================================================================= +// SECTION 13: Resource Management Pattern +// ============================================================================= + +class Resource { + private acquired: bool = false; + private useCount: i32 = 0; + + getAcquireClosure(): () => bool { + return (): bool => { + if (!this.acquired) { + this.acquired = true; + return true; + } + return false; + }; + } + + getReleaseClosure(): () => bool { + return (): bool => { + if (this.acquired) { + this.acquired = false; + return true; + } + return false; + }; + } + + getUseClosure(): (action: () => i32) => i32 { + return (action: () => i32): i32 => { + if (this.acquired) { + this.useCount++; + return action(); + } + return -1; // Error: not acquired + }; + } + + getUseCount(): i32 { + return this.useCount; + } +} + +// Test 13.1: Resource acquire/use/release +function testResourceManagement(): i32 { + let resource = new Resource(); + + let acquire = resource.getAcquireClosure(); + let release = resource.getReleaseClosure(); + let use = resource.getUseClosure(); + + // Can't use without acquiring + assert(use((): i32 => 42) == -1); + + // Acquire + assert(acquire() == true); + assert(acquire() == false); // Already acquired + + // Use + assert(use((): i32 => 10) == 10); + assert(use((): i32 => 20) == 20); + assert(use((): i32 => 30) == 30); + + assert(resource.getUseCount() == 3); + + // Release + assert(release() == true); + assert(release() == false); // Already released + + // Can't use after release + assert(use((): i32 => 42) == -1); + + return resource.getUseCount(); +} +assert(testResourceManagement() == 3); + +// ============================================================================= +// SECTION 14: Composite Pattern with Closures +// ============================================================================= + +class TreeNode { + value: i32; + children: Array = new Array(); + + constructor(v: i32) { + this.value = v; + } + + addChild(child: TreeNode): void { + this.children.push(child); + } + + getSumClosure(): () => i32 { + return (): i32 => { + let sum = this.value; + for (let i = 0; i < this.children.length; i++) { + let childSum = this.children[i].getSumClosure(); + sum += childSum(); + } + return sum; + }; + } + + getDepthClosure(): () => i32 { + return (): i32 => { + if (this.children.length == 0) { + return 1; + } + let maxChildDepth: i32 = 0; + for (let i = 0; i < this.children.length; i++) { + let childDepth = this.children[i].getDepthClosure(); + let d = childDepth(); + if (d > maxChildDepth) { + maxChildDepth = d; + } + } + return maxChildDepth + 1; + }; + } +} + +// Test 14.1: Tree traversal with closures +function testTreePattern(): i32 { + // 1 + // / \ + // 2 3 + // / \ \ + // 4 5 6 + let root = new TreeNode(1); + let n2 = new TreeNode(2); + let n3 = new TreeNode(3); + let n4 = new TreeNode(4); + let n5 = new TreeNode(5); + let n6 = new TreeNode(6); + + root.addChild(n2); + root.addChild(n3); + n2.addChild(n4); + n2.addChild(n5); + n3.addChild(n6); + + let getSum = root.getSumClosure(); + let getDepth = root.getDepthClosure(); + + assert(getSum() == 21); // 1+2+3+4+5+6 + assert(getDepth() == 3); + + return getSum() * 100 + getDepth(); // 2103 +} +assert(testTreePattern() == 2103); + +// ============================================================================= +// SECTION 15: Iterator Pattern with Closures +// ============================================================================= + +class Range { + private current: i32; + private endVal: i32; + private step: i32; + + constructor(start: i32, endVal: i32, step: i32 = 1) { + this.current = start; + this.endVal = endVal; + this.step = step; + } + + getHasNextClosure(): () => bool { + return (): bool => { + if (this.step > 0) { + return this.current < this.endVal; + } else { + return this.current > this.endVal; + } + }; + } + + getNextClosure(): () => i32 { + return (): i32 => { + let value = this.current; + this.current += this.step; + return value; + }; + } + + getResetClosure(start: i32): () => void { + return (): void => { + this.current = start; + }; + } +} + +// Test 15.1: Forward iteration +function testRangeIterator(): i32 { + let range = new Range(0, 5, 1); + let hasNext = range.getHasNextClosure(); + let next = range.getNextClosure(); + + let sum: i32 = 0; + while (hasNext()) { + sum += next(); + } + + return sum; // 0+1+2+3+4 = 10 +} +assert(testRangeIterator() == 10); + +// Test 15.2: Backward iteration with step +function testReverseRangeIterator(): i32 { + let range = new Range(10, 0, -2); + let hasNext = range.getHasNextClosure(); + let next = range.getNextClosure(); + + let sum: i32 = 0; + while (hasNext()) { + sum += next(); + } + + return sum; // 10+8+6+4+2 = 30 +} +assert(testReverseRangeIterator() == 30); + +// ============================================================================= +// Final assertion to confirm all tests passed +// ============================================================================= +assert(true); // If we reach here, all tests passed! diff --git a/tests/compiler/closure-complex.debug.wat b/tests/compiler/closure-complex.debug.wat new file mode 100644 index 0000000000..cd4e5cf4f2 --- /dev/null +++ b/tests/compiler/closure-complex.debug.wat @@ -0,0 +1,5885 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func)) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i64) (result i32))) + (type $9 (func (param i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/rt/__rtti_base i32 (i32.const 1408)) + (global $~lib/memory/__data_end i32 (i32.const 1480)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34248)) + (global $~lib/memory/__heap_base i32 (i32.const 34248)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 412) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00o\00m\00p\00l\00e\00x\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 540) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 636) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $15 (i32.const 684) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $16 (i32.const 732) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 764) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $19 (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 956) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 988) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 1020) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 1052) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $24 (i32.const 1084) "\1c\00\00\00\00\00\00\00\00\00\00\00\r\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $25 (i32.const 1116) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1148) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $27 (i32.const 1180) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 1212) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $29 (i32.const 1260) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $30 (i32.const 1292) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1340) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1372) "\1c\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1408) "\11\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\02A\00\00\02\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 18 18 funcref) + (elem $0 (i32.const 1) $closure-complex/testNestedArrowsWithClassCapture~anonymous|0 $closure-complex/testNestedArrowsWithClassCapture~anonymous|1 $closure-complex/testArrowClosureWithClass~anonymous|0 $closure-complex/createCounterOperations~anonymous|0 $closure-complex/createCounterOperations~anonymous|1 $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0~anonymous|0 $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0 $closure-complex/testDeeplyNestedClassCreation~anonymous|0 $closure-complex/ClosureFactory#createAdder~anonymous|0 $closure-complex/SelfReferencing#addCallback~anonymous|0 $closure-complex/testMultipleClosuresSharing~anonymous|0 $closure-complex/testMultipleClosuresSharing~anonymous|1 $closure-complex/testNestedArrowFunctions~anonymous|0~anonymous|0 $closure-complex/testNestedArrowFunctions~anonymous|0 $closure-complex/testComplexPipeline~anonymous|0 $closure-complex/testCurriedWithClass~anonymous|0~anonymous|0 $closure-complex/testCurriedWithClass~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure-complex/Counter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $closure-complex/Counter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-complex/Calculator#set:result (param $this i32) (param $result i32) + local.get $this + local.get $result + i32.store + ) + (func $closure-complex/Calculator#get:result (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__newBuffer (param $size i32) (param $id i32) (param $data i32) (result i32) + (local $buffer i32) + local.get $size + local.get $id + call $~lib/rt/itcms/__new + local.set $buffer + local.get $data + if + local.get $buffer + local.get $data + local.get $size + memory.copy + end + local.get $buffer + return + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28%29=>i32>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<%28%29=>i32>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-complex/ClosureFactory#set:baseValue (param $this i32) (param $baseValue i32) + local.get $this + local.get $baseValue + i32.store + ) + (func $closure-complex/ClosureFactory#get:baseValue (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-complex/ClosureFactory#createAdder~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=8 + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=4 + i32.add + return + ) + (func $closure-complex/SelfReferencing#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $closure-complex/SelfReferencing#set:callbacks (param $this i32) (param $callbacks i32) + local.get $this + local.get $callbacks + i32.store offset=4 + local.get $this + local.get $callbacks + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $closure-complex/SelfReferencing#get:callbacks (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-complex/SelfReferencing#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-complex/testMultipleClosuresSharing~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-complex/testNestedArrowFunctions~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.mul + ) + (func $closure-complex/testNestedArrowFunctions~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $captured i32) + (local $4 i32) + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.add + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 13 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-complex/testCurriedWithClass~anonymous|0 (param $c i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $c + i32.store offset=4 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 16 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $start:closure-complex + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $closure-complex/testNestedArrowsWithClassCapture + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testArrowClosureWithClass + i32.const 40 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testFactoryWithClassMethods + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testDeeplyNestedClassCreation + i32.const 222 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 123 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testClassReturningClosures + i32.const 223 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 155 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testThisCaptureInClosures + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testMultipleClosuresSharing + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 217 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testNestedArrowFunctions + i32.const 70 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 235 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testComplexPipeline + i32.const 35 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-complex/testCurriedWithClass + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 496 + i32.const 279 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:closure-complex + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 34272 + i32.const 34320 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-complex/Counter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-complex/Counter#increment (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-complex/Counter#get:count + i32.const 1 + i32.add + call $closure-complex/Counter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#get:count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/testNestedArrowsWithClassCapture~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $closure-complex/Counter#increment + local.set $result + local.get $result + local.get $$closureEnv + i32.load offset=8 + i32.mul + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-complex/Calculator#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-complex/Calculator#set:result + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-complex/Calculator#add (param $this i32) (param $x i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-complex/Calculator#get:result + local.get $x + i32.add + call $closure-complex/Calculator#set:result + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-complex/testArrowClosureWithClass~anonymous|0 (param $x i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $x + call $closure-complex/Calculator#add + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/Calculator#getResult (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Calculator#get:result + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/testArrowClosureWithClass (result i32) + (local $$env i32) + (local $calc i32) + (local $2 i32) + (local $addToCalc i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + call $closure-complex/Calculator#constructor + i32.store offset=4 + local.get $$env + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 10 + call $closure-complex/Calculator#set:result + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $addToCalc + i32.store offset=4 + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $addToCalc + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $3) + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $addToCalc + local.tee $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + i32.const 15 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $addToCalc + local.tee $6 + i32.store offset=16 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + local.get $$env + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $closure-complex/Calculator#getResult + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-complex/createCounterOperations~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#increment + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 656 + i32.const 704 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28%29=>i32>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28%29=>i32>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-complex/Counter#getCount (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#get:count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/createCounterOperations~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#getCount + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-complex/createCounterOperations (param $counter i32) (result i32) + (local $1 i32) + (local $operations i32) + (local $$env i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $counter + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + i32.const 8 + i32.const 592 + call $~lib/rt/__newArray + local.tee $operations + i32.store + local.get $operations + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 4 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#push + drop + local.get $operations + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 5 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#push + drop + local.get $operations + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 704 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 784 + i32.const 704 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-complex/testFactoryWithClassMethods (result i32) + (local $counter i32) + (local $ops i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-complex/Counter#constructor + local.tee $counter + i32.store + global.get $~lib/memory/__stack_pointer + local.get $counter + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $closure-complex/createCounterOperations + local.tee $ops + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $ops + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $ops + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $ops + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $ops + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $calc i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-complex/Calculator#constructor + local.tee $calc + i32.store + local.get $calc + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $$closureEnv + i32.load + i32.load + i32.load offset=4 + local.get $$closureEnv + i32.load + i32.load offset=4 + i32.add + local.get $$closureEnv + i32.load offset=4 + i32.add + call $closure-complex/Calculator#set:result + local.get $calc + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-complex/Calculator#multiply (param $this i32) (param $x i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $closure-complex/Calculator#get:result + local.get $x + i32.mul + call $closure-complex/Calculator#set:result + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $level2Value i32) + (local $3 i32) + (local $level3 i32) + (local $5 i32) + (local $calculator i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 6 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $level3 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $level3 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + local.tee $calculator + i32.store offset=8 + local.get $calculator + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + i32.const 2 + call $closure-complex/Calculator#multiply + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $closure-complex/Calculator#getResult + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-complex/ClosureFactory#constructor (param $this i32) (param $baseValue i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $closure-complex/ClosureFactory#set:baseValue + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $baseValue + call $closure-complex/ClosureFactory#set:baseValue + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-complex/ClosureFactory#createAdder (param $this i32) (param $amount i32) (result i32) + (local $$env i32) + (local $base i32) + (local $counter i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $amount + i32.store offset=12 + local.get $$env + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $closure-complex/ClosureFactory#get:baseValue + i32.store offset=8 + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 9 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-complex/testClassReturningClosures (result i32) + (local $factory i32) + (local $adder i32) + (local $sum i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 100 + call $closure-complex/ClosureFactory#constructor + local.tee $factory + i32.store + global.get $~lib/memory/__stack_pointer + local.get $factory + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $closure-complex/ClosureFactory#createAdder + local.tee $adder + i32.store offset=8 + i32.const 0 + local.set $sum + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $adder + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $adder + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $sum + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-complex/SelfReferencing#constructor (param $this i32) (param $value i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $closure-complex/SelfReferencing#set:value + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.const 2 + i32.const 8 + i32.const 1040 + call $~lib/rt/__newArray + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $closure-complex/SelfReferencing#set:callbacks + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $value + call $closure-complex/SelfReferencing#set:value + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $closure-complex/SelfReferencing#addCallback~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/SelfReferencing#get:value + i32.const 2 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/SelfReferencing#addCallback (param $this i32) + (local $$env i32) + (local $self i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $this + i32.store offset=4 + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + call $closure-complex/SelfReferencing#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 10 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $~lib/array/Array<%28%29=>i32>#push + drop + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/SelfReferencing#setValue (param $this i32) (param $newValue i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newValue + call $closure-complex/SelfReferencing#set:value + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28%29=>i32>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/SelfReferencing#executeCallbacks (param $this i32) (result i32) + (local $sum i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 0 + local.set $sum + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-complex/SelfReferencing#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28%29=>i32>#get:length + i32.lt_s + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-complex/SelfReferencing#get:callbacks + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $sum + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-complex/testThisCaptureInClosures (result i32) + (local $obj i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $closure-complex/SelfReferencing#constructor + local.tee $obj + i32.store + local.get $obj + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-complex/SelfReferencing#addCallback + local.get $obj + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-complex/SelfReferencing#addCallback + local.get $obj + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 20 + call $closure-complex/SelfReferencing#setValue + local.get $obj + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-complex/SelfReferencing#addCallback + local.get $obj + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-complex/SelfReferencing#executeCallbacks + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/testMultipleClosuresSharing~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#increment + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 224 + i32.const 704 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-complex/testComplexPipeline~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-complex/Counter#increment + drop + local.get $$closureEnv + i32.load offset=8 + local.get $$closureEnv + i32.load offset=12 + i32.mul + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-complex/testComplexPipeline (result i32) + (local $$env i32) + (local $counter i32) + (local $2 i32) + (local $data i32) + (local $multiplier i32) + (local $result i32) + (local $i i32) + (local $value i32) + (local $8 i32) + (local $process i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + call $closure-complex/Counter#constructor + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 5 + i32.const 2 + i32.const 9 + i32.const 1312 + call $~lib/rt/__newArray + local.tee $data + i32.store + local.get $$env + i32.const 2 + i32.store offset=12 + i32.const 0 + local.set $result + i32.const 0 + local.set $i + loop $for-loop|1 + local.get $i + local.get $data + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $$env + local.get $data + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + local.get $i + call $~lib/array/Array#__get + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $8 + local.get $8 + i32.const 15 + i32.store + local.get $8 + local.get $$env + i32.store offset=4 + local.get $8 + local.tee $process + i32.store offset=8 + local.get $result + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $process + local.tee $10 + i32.store offset=12 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + i32.add + local.set $result + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|1 + end + end + local.get $result + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + call $closure-complex/Counter#getCount + i32.add + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-complex/testCurriedWithClass~anonymous|0~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $x + call $closure-complex/Calculator#add + drop + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-complex/testCurriedWithClass (result i32) + (local $calc i32) + (local $1 i32) + (local $addTo i32) + (local $3 i32) + (local $adder i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-complex/Calculator#constructor + local.tee $calc + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 16 + call $~lib/rt/itcms/__new + local.set $1 + local.get $1 + i32.const 17 + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.tee $addTo + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $addTo + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.tee $adder + i32.store offset=16 + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $adder + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + drop + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $adder + local.tee $6 + i32.store offset=24 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + drop + i32.const 30 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $adder + local.tee $7 + i32.store offset=28 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + drop + local.get $calc + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $closure-complex/Calculator#getResult + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-complex/testNestedArrowsWithClassCapture~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $sum i32) + (local $i i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 0 + local.set $sum + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 3 + i32.lt_s + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=12 + local.tee $3 + i32.store + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + i32.add + local.set $sum + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $sum + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-complex/testNestedArrowsWithClassCapture (result i32) + (local $$env i32) + (local $counter i32) + (local $multiplier i32) + (local $3 i32) + (local $innerIncrement i32) + (local $5 i32) + (local $innerProcess i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + call $closure-complex/Counter#constructor + i32.store offset=4 + local.get $$env + i32.const 2 + i32.store offset=8 + local.get $$env + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 1 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 2 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $innerProcess + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $innerProcess + local.tee $7 + i32.store offset=4 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $2) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $level1Value i32) + (local $3 i32) + (local $level2 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 7 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $level2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $level2 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-complex/testDeeplyNestedClassCreation (result i32) + (local $$env i32) + (local $outerValue i32) + (local $2 i32) + (local $level1 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 8 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $level1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $level1 + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-complex/testMultipleClosuresSharing (result i32) + (local $$env i32) + (local $shared i32) + (local $counter i32) + (local $3 i32) + (local $incrementShared i32) + (local $5 i32) + (local $getShared i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + local.get $$env + i32.const 0 + call $closure-complex/Counter#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 13 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 11 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $incrementShared + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 12 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $getShared + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incrementShared + local.tee $7 + i32.store offset=8 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incrementShared + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incrementShared + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getShared + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $2) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-complex/testNestedArrowFunctions (result i32) + (local $$env i32) + (local $base i32) + (local $2 i32) + (local $outer i32) + (local $4 i32) + (local $fn1 i32) + (local $6 i32) + (local $fn2 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 14 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $outer + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $outer + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.tee $fn1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $outer + local.tee $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.tee $fn2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn1 + local.tee $8 + i32.store offset=20 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn2 + local.tee $9 + i32.store offset=24 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $2) + i32.add + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 656 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 784 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/array/Array<%28%29=>i32>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28%29=>closure-complex/Calculator>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>closure-complex/Calculator>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-complex/Calculator>#__visit + ) + (func $closure-complex/SelfReferencing~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>closure-complex/Calculator>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>closure-complex/Calculator>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-complex/Calculator>#__visit + ) + (func $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator> + block $~lib/function/Function<%28i32%29=>closure-complex/Calculator> + block $~lib/function/Function<%28i32%29=>%28%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $closure-complex/SelfReferencing + block $closure-complex/ClosureFactory + block $~lib/function/Function<%28%29=>closure-complex/Calculator> + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/function/Function<%28i32%29=>void> + block $closure-complex/Calculator + block $~lib/function/Function<%28%29=>i32> + block $closure-complex/Counter + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $closure-complex/Counter $~lib/function/Function<%28%29=>i32> $closure-complex/Calculator $~lib/function/Function<%28i32%29=>void> $~lib/array/Array<%28%29=>i32> $~lib/array/Array $~lib/function/Function<%28%29=>closure-complex/Calculator> $closure-complex/ClosureFactory $closure-complex/SelfReferencing $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%29=>%28%29=>i32> $~lib/function/Function<%28i32%29=>closure-complex/Calculator> $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>closure-complex/Calculator>~visit + return + end + return + end + local.get $0 + local.get $1 + call $closure-complex/SelfReferencing~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>closure-complex/Calculator>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>closure-complex/Calculator>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>closure-complex/Calculator>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>closure-complex/Calculator>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>closure-complex/Calculator>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28closure-complex/Calculator%29=>%28i32%29=>closure-complex/Calculator>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure-complex.json b/tests/compiler/closure-complex.json new file mode 100644 index 0000000000..454738fb3d --- /dev/null +++ b/tests/compiler/closure-complex.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--enable", "closures" + ] +} diff --git a/tests/compiler/closure-complex.release.wat b/tests/compiler/closure-complex.release.wat new file mode 100644 index 0000000000..b69eeed544 --- /dev/null +++ b/tests/compiler/closure-complex.release.wat @@ -0,0 +1,4392 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i32) (result i32))) + (type $9 (func (param i32 i32 i64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35272)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $4 (i32.const 1228) "<") + (data $4.1 (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $5 (i32.const 1292) ",") + (data $5.1 (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $7 (i32.const 1372) "<") + (data $7.1 (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $8 (i32.const 1436) "\1c") + (data $8.1 (i32.const 1448) "\05\00\00\00\08\00\00\00\01") + (data $9 (i32.const 1468) "\1c") + (data $9.1 (i32.const 1480) "\05\00\00\00\08\00\00\00\02") + (data $10 (i32.const 1500) "<") + (data $10.1 (i32.const 1512) "\02\00\00\00$\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00c\00o\00m\00p\00l\00e\00x\00.\00t\00s") + (data $11 (i32.const 1564) "\1c") + (data $11.1 (i32.const 1576) "\07\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1596) "\1c") + (data $12.1 (i32.const 1608) "\01") + (data $13 (i32.const 1628) "\1c") + (data $13.1 (i32.const 1640) "\05\00\00\00\08\00\00\00\04") + (data $14 (i32.const 1660) ",") + (data $14.1 (i32.const 1672) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $15 (i32.const 1708) ",") + (data $15.1 (i32.const 1720) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $16 (i32.const 1756) "\1c") + (data $16.1 (i32.const 1768) "\05\00\00\00\08\00\00\00\05") + (data $17 (i32.const 1788) "|") + (data $17.1 (i32.const 1800) "\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data $18 (i32.const 1916) "\1c") + (data $18.1 (i32.const 1928) "\n\00\00\00\08\00\00\00\06") + (data $19 (i32.const 1948) "\1c") + (data $19.1 (i32.const 1960) "\05\00\00\00\08\00\00\00\07") + (data $20 (i32.const 1980) "\1c") + (data $20.1 (i32.const 1992) "\05\00\00\00\08\00\00\00\08") + (data $21 (i32.const 2012) "\1c") + (data $21.1 (i32.const 2024) "\05\00\00\00\08\00\00\00\t") + (data $22 (i32.const 2044) "\1c") + (data $22.1 (i32.const 2056) "\01") + (data $23 (i32.const 2076) "\1c") + (data $23.1 (i32.const 2088) "\05\00\00\00\08\00\00\00\n") + (data $24 (i32.const 2108) "\1c") + (data $24.1 (i32.const 2120) "\r\00\00\00\08\00\00\00\0b") + (data $25 (i32.const 2140) "\1c") + (data $25.1 (i32.const 2152) "\05\00\00\00\08\00\00\00\0c") + (data $26 (i32.const 2172) "\1c") + (data $26.1 (i32.const 2184) "\05\00\00\00\08\00\00\00\r") + (data $27 (i32.const 2204) "\1c") + (data $27.1 (i32.const 2216) "\0e\00\00\00\08\00\00\00\0e") + (data $28 (i32.const 2236) ",") + (data $28.1 (i32.const 2248) "\01\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data $29 (i32.const 2284) "\1c") + (data $29.1 (i32.const 2296) "\05\00\00\00\08\00\00\00\0f") + (data $30 (i32.const 2316) ",") + (data $30.1 (i32.const 2328) "\01\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05") + (data $31 (i32.const 2364) "\1c") + (data $31.1 (i32.const 2376) "\0f\00\00\00\08\00\00\00\10") + (data $32 (i32.const 2396) "\1c") + (data $32.1 (i32.const 2408) "\10\00\00\00\08\00\00\00\11") + (data $33 (i32.const 2432) "\11\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\02A\00\00\02\t\00\00\00\00\00\00 ") + (table $0 18 18 funcref) + (elem $0 (i32.const 1) $closure-complex/testNestedArrowsWithClassCapture~anonymous|0 $closure-complex/testNestedArrowsWithClassCapture~anonymous|1 $closure-complex/testArrowClosureWithClass~anonymous|0 $closure-complex/createCounterOperations~anonymous|0 $closure-complex/createCounterOperations~anonymous|1 $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0~anonymous|0 $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0 $closure-complex/testDeeplyNestedClassCreation~anonymous|0 $closure-complex/ClosureFactory#createAdder~anonymous|0 $closure-complex/SelfReferencing#addCallback~anonymous|0 $closure-complex/testMultipleClosuresSharing~anonymous|0 $closure-complex/testMultipleClosuresSharing~anonymous|1 $closure-complex/testNestedArrowFunctions~anonymous|0~anonymous|0 $closure-complex/testNestedArrowFunctions~anonymous|0 $closure-complex/testComplexPipeline~anonymous|0 $closure-complex/testCurriedWithClass~anonymous|0~anonymous|0 $closure-complex/testCurriedWithClass~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 35280 + i32.const 0 + i32.store + i32.const 36848 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 35280 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 35280 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 35280 + i32.const 36852 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 35280 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + memory.size + local.tee $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $1 + local.get $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1248 + i32.const 1728 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 1808 + i32.const 1728 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-complex/Calculator#getResult (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $closure-complex/Counter#increment (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/Counter#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$236 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 35272 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$236 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 2432 + i32.load + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 2436 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $closure-complex/SelfReferencing + block $closure-complex/ClosureFactory + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $closure-complex/Calculator + block $closure-complex/Counter + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $closure-complex/Counter $folding-inner1 $closure-complex/Calculator $folding-inner1 $~lib/array/Array<%28%29=>i32> $~lib/array/Array $folding-inner1 $closure-complex/ClosureFactory $closure-complex/SelfReferencing $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + return + end + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + br $folding-inner2 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + br $folding-inner2 + end + return + end + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + i32.shl + local.tee $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $3 + local.get $2 + if + local.get $3 + local.get $2 + local.get $4 + memory.copy + end + local.get $3 + i32.store + i32.const 16 + local.get $1 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + local.get $4 + i32.store offset=8 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array<%28%29=>i32>#push (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + local.tee $7 + i32.const 1 + i32.add + local.tee $6 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $4 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $4 + i32.const 268435455 + i32.gt_u + if + i32.const 1680 + i32.const 1728 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$224 + i32.const 1073741820 + local.get $2 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.const 8 + local.get $4 + local.get $4 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $2 + local.get $2 + local.get $3 + i32.lt_u + select + local.tee $5 + local.get $0 + i32.load + local.tee $2 + i32.const 20 + i32.sub + local.tee $4 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $4 + local.get $5 + i32.store offset=16 + local.get $2 + local.set $3 + br $__inlined_func$~lib/rt/itcms/__renew$224 + end + local.get $5 + local.get $4 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $3 + local.get $2 + local.get $5 + local.get $4 + i32.load offset=16 + local.tee $4 + local.get $4 + local.get $5 + i32.gt_u + select + memory.copy + end + local.get $2 + local.get $3 + i32.ne + if + local.get $0 + local.get $3 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $7 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-complex/SelfReferencing#addCallback (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 10 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/Calculator#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/object/Object#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1248 + call $~lib/rt/itcms/__visit + i32.const 1680 + call $~lib/rt/itcms/__visit + i32.const 1808 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/object/Object#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array<%28%29=>i32>#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/Calculator#add (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $0 + i32.load + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:closure-complex + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 35272 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 35272 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 35272 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $start:closure-complex + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + memory.size + i32.const 16 + i32.shl + i32.const 35272 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store + i32.const 1176 + i32.const 1168 + i32.store + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store + i32.const 1352 + i32.const 1344 + i32.store + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $3 + call $closure-complex/Counter#constructor + i32.store offset=8 + local.get $3 + i32.const 2 + i32.store offset=12 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 1 + i32.store + local.get $5 + local.get $4 + i32.store offset=4 + local.get $3 + local.get $5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 2 + i32.store + local.get $5 + local.get $4 + i32.store offset=4 + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $3 + call $closure-complex/Calculator#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $5 + i32.store + local.get $5 + i32.const 10 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 3 + i32.store + local.get $6 + local.get $4 + i32.store offset=4 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=16 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 15 + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + call $closure-complex/Calculator#getResult + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 40 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-complex/Counter#constructor + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $5 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $5 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 8 + i32.const 1616 + call $~lib/rt/__newArray + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 4 + i32.store + local.get $5 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $3 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#push + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 5 + i32.store + local.get $5 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $3 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#push + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=24 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $4 + i32.const 0 + i32.store + local.get $3 + i32.const 100 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 8 + i32.store + local.get $5 + local.get $4 + i32.store offset=4 + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 222 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 123 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 100 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $5 + i32.const 4 + i32.add + local.tee $6 + i32.const 0 + i32.store + local.get $5 + i32.const 10 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $5 + local.get $4 + i32.load + i32.store offset=12 + local.get $5 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 9 + i32.store + local.get $4 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.get $3 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 223 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 155 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 0 + i32.const 8 + i32.const 2064 + call $~lib/rt/__newArray + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $4 + local.get $5 + i32.store offset=4 + local.get $4 + local.get $5 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 10 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-complex/SelfReferencing#addCallback + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-complex/SelfReferencing#addCallback + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.const 20 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $closure-complex/SelfReferencing#addCallback + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load offset=4 + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + local.set $1 + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + call $closure-complex/Counter#constructor + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 11 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 12 + i32.store + local.get $4 + local.get $2 + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 217 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + i32.const 0 + i32.store + local.get $1 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 14 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + i32.const 5 + local.get $3 + i32.load + call_indirect (type $1) + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + i32.const 10 + local.get $3 + i32.load + call_indirect (type $1) + local.tee $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.get $1 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 70 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 235 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $1 + call $closure-complex/Counter#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 5 + i32.const 9 + i32.const 2336 + call $~lib/rt/__newArray + local.tee $4 + i32.store + local.get $1 + i32.const 2 + i32.store offset=16 + i32.const 0 + local.set $2 + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $~lib/array/Array<%28%29=>i32>#get:length + local.get $0 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $0 + local.get $4 + i32.load offset=12 + i32.ge_u + if + i32.const 1248 + i32.const 1728 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.load offset=4 + local.get $0 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 15 + i32.store + local.get $6 + local.get $3 + i32.store offset=4 + local.get $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.get $2 + i32.add + local.set $2 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $0 + i32.store offset=4 + local.get $0 + call $closure-complex/Calculator#getResult + local.get $2 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 35 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/memory/__stack_pointer + call $closure-complex/Calculator#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 16 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 17 + i32.store + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $2 + i32.load + call_indirect (type $1) + local.tee $1 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + local.get $1 + i32.load + call_indirect (type $1) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 20 + local.get $1 + i32.load + call_indirect (type $1) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 30 + local.get $1 + i32.load + call_indirect (type $1) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + call $closure-complex/Calculator#getResult + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1520 + i32.const 279 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + return + end + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-complex/testNestedArrowsWithClassCapture~anonymous|1 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $3 + loop $for-loop|0 + local.get $0 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.load offset=12 + local.tee $1 + i32.store + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.get $2 + i32.add + local.set $2 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $closure-complex/testNestedArrowsWithClassCapture~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + call $closure-complex/Counter#increment + local.get $0 + i32.load offset=8 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/testNestedArrowFunctions~anonymous|0~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + i32.const 1 + i32.shl + ) + (func $closure-complex/testNestedArrowFunctions~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/__closure_env + local.set $1 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.tee $2 + local.get $1 + i32.store + local.get $3 + local.get $0 + local.get $1 + i32.load offset=4 + i32.add + i32.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 13 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + ) + (func $closure-complex/testMultipleClosuresSharing~anonymous|1 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + ) + (func $closure-complex/testMultipleClosuresSharing~anonymous|0 + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $2 + i32.store + local.get $0 + local.get $2 + call $closure-complex/Counter#increment + local.get $1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $1 + global.get $~lib/memory/__stack_pointer + call $closure-complex/Calculator#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load offset=4 + local.get $1 + i32.load + local.tee $1 + i32.load + i32.load offset=4 + local.get $1 + i32.load offset=4 + i32.add + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 6 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + call_indirect (type $0) + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.shl + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + call $closure-complex/Calculator#getResult + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-complex/testDeeplyNestedClassCreation~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 7 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/testCurriedWithClass~anonymous|0~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + local.get $0 + call $closure-complex/Calculator#add + local.get $1 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/testCurriedWithClass~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 16 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-complex/testComplexPipeline~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + call $closure-complex/Counter#increment + drop + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=12 + i32.mul + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/testArrowClosureWithClass~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + local.get $0 + call $closure-complex/Calculator#add + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/createCounterOperations~anonymous|1 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $closure-complex/Calculator#getResult + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/createCounterOperations~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + call $closure-complex/Counter#increment + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/SelfReferencing#addCallback~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2504 + i32.lt_s + if + i32.const 35296 + i32.const 35344 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-complex/ClosureFactory#createAdder~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + local.get $0 + i32.load offset=12 + i32.add + i32.add + ) +) diff --git a/tests/compiler/closure-complex.ts b/tests/compiler/closure-complex.ts new file mode 100644 index 0000000000..26eeeed9be --- /dev/null +++ b/tests/compiler/closure-complex.ts @@ -0,0 +1,279 @@ +class Counter { + private count: i32 = 0; + + increment(): i32 { + this.count++; + return this.count; + } + + getCount(): i32 { + return this.count; + } +} + +class Calculator { + result: i32 = 0; + + add(x: i32): Calculator { + this.result += x; + return this; + } + + multiply(x: i32): Calculator { + this.result *= x; + return this; + } + + getResult(): i32 { + return this.result; + } +} + +// ============================================================================ +// Test 1: Nested arrow functions with class instance capture +// ============================================================================ +function testNestedArrowsWithClassCapture(): i32 { + let counter = new Counter(); + let multiplier = 2; + + let innerIncrement = (): i32 => { + let result = counter.increment(); + return result * multiplier; + }; + + let innerProcess = (): i32 => { + let sum = 0; + for (let i = 0; i < 3; i++) { + sum += innerIncrement(); + } + return sum; + }; + + return innerProcess(); // (1*2) + (2*2) + (3*2) = 12 +} +assert(testNestedArrowsWithClassCapture() == 12); + +// ============================================================================ +// Test 2: Arrow closure capturing class instance +// ============================================================================ +function testArrowClosureWithClass(): i32 { + let calc = new Calculator(); + calc.result = 10; + + let addToCalc = (x: i32): void => { + calc.add(x); + }; + + addToCalc(5); + addToCalc(10); + addToCalc(15); + + return calc.getResult(); // 10 + 5 + 10 + 15 = 40 +} +assert(testArrowClosureWithClass() == 40); + +// ============================================================================ +// Test 3: Factory function returning closures that use class methods +// ============================================================================ +function createCounterOperations(counter: Counter): Array<() => i32> { + let operations: Array<() => i32> = []; + operations.push((): i32 => counter.increment()); + operations.push((): i32 => counter.getCount()); + return operations; +} + +function testFactoryWithClassMethods(): i32 { + let counter = new Counter(); + let ops = createCounterOperations(counter); + + ops[0](); // increment -> 1 + ops[0](); // increment -> 2 + ops[0](); // increment -> 3 + return ops[1](); // getCount -> 3 +} +assert(testFactoryWithClassMethods() == 3); + +// ============================================================================ +// Test 4: Deeply nested arrow functions creating classes +// ============================================================================ +function testDeeplyNestedClassCreation(): i32 { + let outerValue = 100; + + let level1 = (): i32 => { + let level1Value = 10; + + let level2 = (): i32 => { + let level2Value = 1; + + let level3 = (): Calculator => { + let calc = new Calculator(); + calc.result = outerValue + level1Value + level2Value; + return calc; + }; + + let calculator = level3(); + return calculator.multiply(2).getResult(); + }; + + return level2(); + }; + + return level1(); // (100 + 10 + 1) * 2 = 222 +} +assert(testDeeplyNestedClassCreation() == 222); + +// ============================================================================ +// Test 5: Class with method returning closure +// ============================================================================ +class ClosureFactory { + private baseValue: i32; + + constructor(baseValue: i32) { + this.baseValue = baseValue; + } + + createAdder(amount: i32): () => i32 { + let base = this.baseValue; + let counter = 0; + return (): i32 => { + counter++; + return base + amount + counter; + }; + } +} + +function testClassReturningClosures(): i32 { + let factory = new ClosureFactory(100); + let adder = factory.createAdder(10); + + let sum = 0; + sum += adder(); // 100 + 10 + 1 = 111 + sum += adder(); // 100 + 10 + 2 = 112 + + return sum; // 111 + 112 = 223 +} +assert(testClassReturningClosures() == 223); + +// ============================================================================ +// Test 6: Closure capturing 'this' in class methods +// ============================================================================ +class SelfReferencing { + value: i32; + callbacks: Array<() => i32> = []; + + constructor(value: i32) { + this.value = value; + } + + addCallback(): void { + let self = this; + this.callbacks.push((): i32 => { + return self.value * 2; + }); + } + + executeCallbacks(): i32 { + let sum = 0; + for (let i = 0; i < this.callbacks.length; i++) { + sum += this.callbacks[i](); + } + return sum; + } + + setValue(newValue: i32): void { + this.value = newValue; + } +} + +function testThisCaptureInClosures(): i32 { + let obj = new SelfReferencing(10); + + obj.addCallback(); + obj.addCallback(); + obj.setValue(20); + obj.addCallback(); + + // value is now 20, each callback returns 40 + return obj.executeCallbacks(); // 40 + 40 + 40 = 120 +} +assert(testThisCaptureInClosures() == 120); + +// ============================================================================ +// Test 7: Multiple closures sharing same variables +// ============================================================================ +function testMultipleClosuresSharing(): i32 { + let shared = 0; + let counter = new Counter(); + + let incrementShared = (): void => { shared += counter.increment(); }; + let getShared = (): i32 => shared; + + incrementShared(); // shared = 0 + 1 = 1 + incrementShared(); // shared = 1 + 2 = 3 + incrementShared(); // shared = 3 + 3 = 6 + + return getShared(); // 6 +} +assert(testMultipleClosuresSharing() == 6); + +// ============================================================================ +// Test 8: Nested arrow functions +// ============================================================================ +function testNestedArrowFunctions(): i32 { + let base = 10; + + let outer = (x: i32): (() => i32) => { + let captured = x + base; + return (): i32 => captured * 2; + }; + + let fn1 = outer(5); // captured = 15, returns () => 30 + let fn2 = outer(10); // captured = 20, returns () => 40 + + return fn1() + fn2(); // 30 + 40 = 70 +} +assert(testNestedArrowFunctions() == 70); + +// ============================================================================ +// Test 9: Complex pipeline with closures and classes +// ============================================================================ +function testComplexPipeline(): i32 { + let counter = new Counter(); + let data: Array = [1, 2, 3, 4, 5]; + let multiplier = 2; + + let result = 0; + for (let i = 0; i < data.length; i++) { + let value = data[i]; + let process = (): i32 => { + counter.increment(); + return value * multiplier; + }; + result += process(); + } + + return result + counter.getCount(); // (2+4+6+8+10) + 5 = 30 + 5 = 35 +} +assert(testComplexPipeline() == 35); + +// ============================================================================ +// Test 10: Curried function with class +// ============================================================================ +function testCurriedWithClass(): i32 { + let calc = new Calculator(); + + let addTo = (c: Calculator): (x: i32) => Calculator => { + return (x: i32): Calculator => { + c.add(x); + return c; + }; + }; + + let adder = addTo(calc); + adder(10); + adder(20); + adder(30); + + return calc.getResult(); // 10 + 20 + 30 = 60 +} +assert(testCurriedWithClass() == 60); diff --git a/tests/compiler/closure-stress.debug.wat b/tests/compiler/closure-stress.debug.wat new file mode 100644 index 0000000000..0072d45628 --- /dev/null +++ b/tests/compiler/closure-stress.debug.wat @@ -0,0 +1,12370 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32))) + (type $3 (func)) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (result f64))) + (type $8 (func (param i32 i32 i32) (result i32))) + (type $9 (func (param i32 i32 i32 i32))) + (type $10 (func (result i64))) + (type $11 (func (result f32))) + (type $12 (func (param i32 i32 i64) (result i32))) + (type $13 (func (param i64) (result i32))) + (type $14 (func (param f32) (result i32))) + (type $15 (func (param f64) (result i32))) + (type $16 (func (param i32 i64 f32 f64) (result i32))) + (type $17 (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) + (type $18 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $closure-stress/counter1 (mut i32) (i32.const 0)) + (global $closure-stress/counter2 (mut i32) (i32.const 0)) + (global $closure-stress/addTo10 (mut i32) (i32.const 0)) + (global $closure-stress/greaterThan5 (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $closure-stress/add5 (mut i32) (i32.const 0)) + (global $closure-stress/add10 (mut i32) (i32.const 0)) + (global $closure-stress/double (mut i32) (i32.const 0)) + (global $closure-stress/triple (mut i32) (i32.const 0)) + (global $closure-stress/addThenDouble (mut i32) (i32.const 0)) + (global $closure-stress/callCount (mut i32) (i32.const 0)) + (global $closure-stress/fact (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $closure-stress/addResult (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 3472)) + (global $~lib/memory/__data_end i32 (i32.const 3556)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36324)) + (global $~lib/memory/__heap_base i32 (i32.const 36324)) + (memory $0 1) + (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $2 (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 208) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 236) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 352) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\"\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00s\00t\00r\00e\00s\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 508) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 540) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 636) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 668) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 700) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 732) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 764) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $19 (i32.const 796) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 828) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 860) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 892) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 924) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $24 (i32.const 956) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $25 (i32.const 988) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1020) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $27 (i32.const 1052) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $29 (i32.const 1132) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $30 (i32.const 1180) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1212) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1244) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1276) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $34 (i32.const 1404) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1436) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1468) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $37 (i32.const 1500) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $38 (i32.const 1532) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\1b\00\00\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1564) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1c\00\00\00\00\00\00\00\00\00\00\00") + (data $40 (i32.const 1596) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\1d\00\00\00\00\00\00\00\00\00\00\00") + (data $41 (i32.const 1628) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\1e\00\00\00\00\00\00\00\00\00\00\00") + (data $42 (i32.const 1660) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\1f\00\00\00\00\00\00\00\00\00\00\00") + (data $43 (i32.const 1692) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00 \00\00\00\00\00\00\00\00\00\00\00") + (data $44 (i32.const 1724) "\1c\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\08\00\00\00!\00\00\00\00\00\00\00\00\00\00\00") + (data $45 (i32.const 1756) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\"\00\00\00\00\00\00\00\00\00\00\00") + (data $46 (i32.const 1788) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00#\00\00\00\00\00\00\00\00\00\00\00") + (data $47 (i32.const 1820) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00$\00\00\00\00\00\00\00\00\00\00\00") + (data $48 (i32.const 1852) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00%\00\00\00\00\00\00\00\00\00\00\00") + (data $49 (i32.const 1884) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00&\00\00\00\00\00\00\00\00\00\00\00") + (data $50 (i32.const 1916) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data $51 (i32.const 1980) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t\00\00\00\00\00\00\00\00\00") + (data $52 (i32.const 2044) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s\00\00\00\00\00\00\00") + (data $53 (i32.const 2092) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\'\00\00\00\00\00\00\00\00\00\00\00") + (data $54 (i32.const 2124) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00(\00\00\00\00\00\00\00\00\00\00\00") + (data $55 (i32.const 2156) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00)\00\00\00\00\00\00\00\00\00\00\00") + (data $56 (i32.const 2188) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00*\00\00\00\00\00\00\00\00\00\00\00") + (data $57 (i32.const 2220) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data $58 (i32.const 2252) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00,\00\00\00\00\00\00\00\00\00\00\00") + (data $59 (i32.const 2284) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data $60 (i32.const 2316) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data $61 (i32.const 2348) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00/\00\00\00\00\00\00\00\00\00\00\00") + (data $62 (i32.const 2380) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $63 (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\001\00\00\00\00\00\00\00\00\00\00\00") + (data $64 (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\002\00\00\00\00\00\00\00\00\00\00\00") + (data $65 (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\003\00\00\00\00\00\00\00\00\00\00\00") + (data $66 (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\004\00\00\00\00\00\00\00\00\00\00\00") + (data $67 (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\005\00\00\00\00\00\00\00\00\00\00\00") + (data $68 (i32.const 2572) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\006\00\00\00\00\00\00\00\00\00\00\00") + (data $69 (i32.const 2604) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\007\00\00\00\00\00\00\00\00\00\00\00") + (data $70 (i32.const 2636) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\008\00\00\00\00\00\00\00\00\00\00\00") + (data $71 (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\009\00\00\00\00\00\00\00\00\00\00\00") + (data $72 (i32.const 2700) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data $73 (i32.const 2732) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00;\00\00\00\00\00\00\00\00\00\00\00") + (data $74 (i32.const 2764) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00<\00\00\00\00\00\00\00\00\00\00\00") + (data $75 (i32.const 2796) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00H\00e\00l\00l\00o\00\00\00") + (data $76 (i32.const 2828) "\1c\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\08\00\00\00=\00\00\00\00\00\00\00\00\00\00\00") + (data $77 (i32.const 2860) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00A\00\00\00\00\00\00\00\00\00\00\00") + (data $78 (i32.const 2892) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $79 (i32.const 2924) "\1c\00\00\00\00\00\00\00\00\00\00\00\13\00\00\00\08\00\00\00>\00\00\00\00\00\00\00\00\00\00\00") + (data $80 (i32.const 2956) "\1c\00\00\00\00\00\00\00\00\00\00\00\12\00\00\00\08\00\00\00?\00\00\00\00\00\00\00\00\00\00\00") + (data $81 (i32.const 2988) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00B\00\00\00\00\00\00\00\00\00\00\00") + (data $82 (i32.const 3020) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00C\00\00\00\00\00\00\00\00\00\00\00") + (data $83 (i32.const 3052) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00D\00\00\00\00\00\00\00\00\00\00\00") + (data $84 (i32.const 3084) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00A\00B\00C\00D\00\00\00\00\00") + (data $85 (i32.const 3116) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00@\00\00\00\00\00\00\00\00\00\00\00") + (data $86 (i32.const 3148) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00A\00\00\00\00\00\00\00\00\00\00\00") + (data $87 (i32.const 3180) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00B\00\00\00\00\00\00\00\00\00\00\00") + (data $88 (i32.const 3212) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00C\00\00\00\00\00\00\00\00\00\00\00") + (data $89 (i32.const 3244) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00D\00\00\00\00\00\00\00\00\00\00\00") + (data $90 (i32.const 3276) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00E\00\00\00\00\00\00\00\00\00\00\00") + (data $91 (i32.const 3308) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00F\00\00\00\00\00\00\00\00\00\00\00") + (data $92 (i32.const 3340) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00G\00\00\00\00\00\00\00\00\00\00\00") + (data $93 (i32.const 3372) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00H\00\00\00\00\00\00\00\00\00\00\00") + (data $94 (i32.const 3404) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00I\00\00\00\00\00\00\00\00\00\00\00") + (data $95 (i32.const 3436) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00J\00\00\00\00\00\00\00\00\00\00\00") + (data $96 (i32.const 3472) "\14\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00\02\t\00\00 \00\00\00\00\00\00\00\10\t\12\00\00\00\00\00\00\00\00\00") + (table $0 75 75 funcref) + (elem $0 (i32.const 1) $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI64Param~anonymous|0 $closure-stress/captureF32Param~anonymous|0 $closure-stress/captureF64Param~anonymous|0 $closure-stress/captureBool~anonymous|0 $closure-stress/captureMultipleI32~anonymous|0 $closure-stress/captureMixedTypes~anonymous|0 $closure-stress/capture8Params~anonymous|0 $closure-stress/captureParamsAndLocals~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|1 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/testSharedMutation~anonymous|1 $closure-stress/testSharedMutation~anonymous|2 $closure-stress/testOuterScopeMutation~anonymous|0 $closure-stress/testOuterScopeMutation~anonymous|1 $closure-stress/curriedAdd~anonymous|0 $closure-stress/makeGreaterThan~anonymous|0 $closure-stress/simpleClosureArray~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/closureInConditional~anonymous|0 $closure-stress/closureInConditional~anonymous|1 $closure-stress/closureEscapingBlock~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|1 $closure-stress/captureClassInstance~anonymous|0 $closure-stress/captureClassInstance~anonymous|1 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/testFilterWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/makeAdder~anonymous|0 $closure-stress/makeMultiplier~anonymous|0 $closure-stress/compose~anonymous|0 $closure-stress/expensiveComputation $closure-stress/memoize~anonymous|0 $closure-stress/emptyClosure~anonymous|0 $closure-stress/captureOnlyNoParams~anonymous|0 $closure-stress/ignoreCapture~anonymous|0 $closure-stress/multipleClosureReturns~anonymous|0 $closure-stress/multipleClosureReturns~anonymous|1 $closure-stress/multipleClosureReturns~anonymous|2 $closure-stress/makeFactorial~anonymous|0 $closure-stress/captureSmallTypes~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|1 $closure-stress/manyClosuresSameEnv~anonymous|2 $closure-stress/manyClosuresSameEnv~anonymous|3 $closure-stress/manyClosuresSameEnv~anonymous|4 $closure-stress/manyClosuresSameEnv~anonymous|5 $closure-stress/manyCaptures~anonymous|0 $closure-stress/simpleIIFE~anonymous|0 $closure-stress/captureLoopValue~anonymous|0 $closure-stress/interleavedClosures~anonymous|0 $closure-stress/interleavedClosures~anonymous|1 $closure-stress/interleavedClosures~anonymous|2 $closure-stress/interleavedClosures~anonymous|3 $closure-stress/captureString~anonymous|0 $closure-stress/mutateStringRef~anonymous|0 $closure-stress/mutateStringRef~anonymous|1 $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 $closure-stress/testNestedClosureFunctions~anonymous|0 $closure-stress/testRangeWithClosure~anonymous|0 $closure-stress/add~anonymous|0 $closure-stress/testTwoClosuresSameVar~anonymous|0 $closure-stress/testTwoClosuresSameVar~anonymous|1 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0 $closure-stress/makeAdderPair~anonymous|0 $closure-stress/makeAdderPair~anonymous|1) + (export "memory" (memory $0)) + (start $~start) + (func $closure-stress/captureI32Param~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 256 + i32.const 320 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 128 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 64 + i32.const 400 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 64 + i32.const 128 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure-stress/captureI32Param (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureI64Param~anonymous|0 (result i64) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i64.load offset=8 + ) + (func $closure-stress/captureI64Param (param $x i64) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i64.store offset=8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureF32Param~anonymous|0 (result f32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + f32.load offset=4 + ) + (func $closure-stress/captureF32Param (param $x f32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + f32.store offset=4 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureF64Param~anonymous|0 (result f64) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + f64.load offset=8 + ) + (func $closure-stress/captureF64Param (param $x f64) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + f64.store offset=8 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureBool~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_u offset=4 + ) + (func $closure-stress/captureBool (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store8 offset=4 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 5 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + ) + (func $closure-stress/captureMultipleI32 (param $a i32) (param $b i32) (param $c i32) (result i32) + (local $$env i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + local.get $c + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 6 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + f64.convert_i32_s + local.get $$closureEnv + i64.load offset=8 + f64.convert_i64_s + f64.add + local.get $$closureEnv + f32.load offset=16 + f64.promote_f32 + f64.add + local.get $$closureEnv + f64.load offset=24 + f64.add + ) + (func $closure-stress/captureMixedTypes (param $a i32) (param $b i64) (param $c f32) (param $d f64) (result i32) + (local $$env i32) + (local $5 i32) + i32.const 32 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i64.store offset=8 + local.get $$env + local.get $c + f32.store offset=16 + local.get $$env + local.get $d + f64.store offset=24 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 7 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + ) + (func $closure-stress/capture8Params~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + local.get $$closureEnv + i32.load offset=20 + i32.add + local.get $$closureEnv + i32.load offset=24 + i32.add + local.get $$closureEnv + i32.load offset=28 + i32.add + local.get $$closureEnv + i32.load offset=32 + i32.add + ) + (func $closure-stress/capture8Params (param $a i32) (param $b i32) (param $c i32) (param $d i32) (param $e i32) (param $f i32) (param $g i32) (param $h i32) (result i32) + (local $$env i32) + (local $9 i32) + i32.const 36 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + local.get $c + i32.store offset=12 + local.get $$env + local.get $d + i32.store offset=16 + local.get $$env + local.get $e + i32.store offset=20 + local.get $$env + local.get $f + i32.store offset=24 + local.get $$env + local.get $g + i32.store offset=28 + local.get $$env + local.get $h + i32.store offset=32 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $9 + local.get $9 + i32.const 8 + i32.store + local.get $9 + local.get $$env + i32.store offset=4 + local.get $9 + return + ) + (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + ) + (func $closure-stress/captureParamsAndLocals (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $c i32) + (local $d i32) + (local $5 i32) + i32.const 20 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + i32.const 100 + i32.store offset=12 + local.get $$env + i32.const 200 + i32.store offset=16 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 9 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + ) + (func $closure-stress/makeCounter~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/makeCounter (result i32) + (local $$env i32) + (local $count i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 10 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $x i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $x + i32.store offset=4 + ) + (func $closure-stress/testBidirectionalMutation~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|1 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + ) + (func $closure-stress/testSharedMutation~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.mul + i32.store offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/curriedAdd~anonymous|0 (param $b i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $b + i32.add + ) + (func $closure-stress/curriedAdd (param $a i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 18 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/makeGreaterThan~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.gt_s + ) + (func $closure-stress/makeGreaterThan (param $threshold i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $threshold + i32.store offset=4 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array<%28%29=>i32>#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array<%28%29=>i32>#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array<%28%29=>i32>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure-stress/simpleClosureArray~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/array/Array<%28%29=>i32>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28%29=>i32>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/simpleClosureArray~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=12 + ) + (func $closure-stress/closureInConditional~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/closureInConditional~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/closureEscapingBlock~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure-stress/Counter#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $closure-stress/Counter#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $closure-stress/testMapWithClosure~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.mul + ) + (func $closure-stress/testFilterWithClosure~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.ge_s + ) + (func $closure-stress/testReduceWithClosure~anonymous|0 (param $acc i32) (param $x i32) (result i32) + local.get $acc + local.get $x + i32.add + ) + (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $closure-stress/makeAdder~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.add + ) + (func $closure-stress/makeAdder (param $amount i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $amount + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 35 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/makeMultiplier~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + local.get $$closureEnv + i32.load offset=4 + i32.mul + ) + (func $closure-stress/makeMultiplier (param $factor i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $factor + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 36 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/compose (param $f i32) (param $g i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $f + i32.store offset=4 + local.get $$env + local.get $g + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 37 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/expensiveComputation (param $x i32) (result i32) + global.get $closure-stress/callCount + i32.const 1 + i32.add + global.set $closure-stress/callCount + local.get $x + local.get $x + i32.mul + return + ) + (func $"~lib/map/Map#set:buckets" (param $this i32) (param $buckets i32) + local.get $this + local.get $buckets + i32.store + local.get $this + local.get $buckets + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $"~lib/map/Map#set:bucketsMask" (param $this i32) (param $bucketsMask i32) + local.get $this + local.get $bucketsMask + i32.store offset=4 + ) + (func $"~lib/map/Map#set:entries" (param $this i32) (param $entries i32) + local.get $this + local.get $entries + i32.store offset=8 + local.get $this + local.get $entries + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $"~lib/map/Map#set:entriesCapacity" (param $this i32) (param $entriesCapacity i32) + local.get $this + local.get $entriesCapacity + i32.store offset=12 + ) + (func $"~lib/map/Map#set:entriesOffset" (param $this i32) (param $entriesOffset i32) + local.get $this + local.get $entriesOffset + i32.store offset=16 + ) + (func $"~lib/map/Map#set:entriesCount" (param $this i32) (param $entriesCount i32) + local.get $this + local.get $entriesCount + i32.store offset=20 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.0 + end + return + ) + (func $"~lib/map/Map#get:buckets" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/map/Map#get:bucketsMask" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/map/MapEntry#get:taggedNext" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/map/MapEntry#get:key" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/map/MapEntry#get:value" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/map/MapEntry#set:value" (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store offset=4 + ) + (func $"~lib/map/Map#get:entriesOffset" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/map/Map#get:entriesCapacity" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $"~lib/map/Map#get:entriesCount" (param $this i32) (result i32) + local.get $this + i32.load offset=20 + ) + (func $"~lib/map/Map#get:entries" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/map/MapEntry#set:key" (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store + ) + (func $"~lib/map/MapEntry#set:taggedNext" (param $this i32) (param $taggedNext i32) + local.get $this + local.get $taggedNext + i32.store offset=8 + ) + (func $closure-stress/memoize (param $fn i32) (result i32) + (local $$env i32) + (local $cache i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $fn + i32.store offset=8 + local.get $$env + i32.const 0 + call $"~lib/map/Map#constructor" + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 39 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/emptyClosure~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/emptyClosure (result i32) + i32.const 2144 + return + ) + (func $closure-stress/captureOnlyNoParams~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $closure-stress/ignoreCapture~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/multipleClosureReturns~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/multipleClosureReturns~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure-stress/multipleClosureReturns~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=12 + ) + (func $closure-stress/multipleClosureReturns (param $which i32) (result i32) + (local $$env i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $$env + i32.const 30 + i32.store offset=12 + local.get $which + i32.const 0 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 43 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + return + else + local.get $which + i32.const 1 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 44 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + return + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 45 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + return + end + unreachable + end + unreachable + ) + (func $closure-stress/makeFactorial~anonymous|0 (param $n i32) (result i32) + (local $result i32) + (local $i i32) + i32.const 1 + local.set $result + i32.const 2 + local.set $i + loop $for-loop|0 + local.get $i + local.get $n + i32.le_s + if + local.get $result + local.get $i + i32.mul + local.set $result + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + return + ) + (func $closure-stress/makeFactorial (result i32) + i32.const 2336 + return + ) + (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_s offset=4 + local.get $$closureEnv + i32.load8_u offset=5 + i32.add + local.get $$closureEnv + i32.load16_s offset=6 + i32.add + local.get $$closureEnv + i32.load16_u offset=8 + i32.add + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|1 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 2 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|2 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 3 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|3 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 4 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|4 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 5 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|5 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/manyCaptures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + local.get $$closureEnv + i32.load offset=16 + i32.add + local.get $$closureEnv + i32.load offset=20 + i32.add + local.get $$closureEnv + i32.load offset=24 + i32.add + local.get $$closureEnv + i32.load offset=28 + i32.add + local.get $$closureEnv + i32.load offset=32 + i32.add + local.get $$closureEnv + i32.load offset=36 + i32.add + local.get $$closureEnv + i32.load offset=40 + i32.add + local.get $$closureEnv + i32.load offset=44 + i32.add + local.get $$closureEnv + i32.load offset=48 + i32.add + ) + (func $closure-stress/simpleIIFE~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 9 + i32.add + return + ) + (func $closure-stress/captureLoopValue~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/captureLoopValue (param $val i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $val + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 56 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure-stress/interleavedClosures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|1 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|2 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 10 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|3 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 100 + i32.add + i32.store offset=4 + ) + (func $closure-stress/captureString~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $7 + i32.const 1 + i32.sub + local.set $len + local.get $7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + return + ) + (func $closure-stress/mutateStringRef~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/testRangeWithClosure~anonymous|0 (param $i i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $i + i32.add + i32.store offset=4 + ) + (func $closure-stress/range (param $a i32) (param $b i32) (param $fn i32) + (local $i i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + local.set $i + loop $for-loop|0 + local.get $i + local.get $b + i32.lt_s + if + local.get $i + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/add~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $closure-stress/add (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $3 i32) + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 67 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + return + ) + (func $closure-stress/testTwoClosuresSameVar~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure-stress/testTwoClosuresSameVar~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load + i32.load + i32.load offset=4 + local.get $$closureEnv + i32.load + i32.load offset=4 + i32.add + local.get $$closureEnv + i32.load offset=4 + i32.add + return + ) + (func $closure-stress/makeAdderPair~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure-stress/makeAdderPair~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~start + call $start:closure-stress + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 36352 + i32.const 36400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array<%28%29=>i32>#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array<%28%29=>i32>#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array<%28%29=>i32>#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 256 + i32.const 1152 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array<%28%29=>i32>#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 1 + drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1152 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1296 + i32.const 1152 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/simpleClosureArray (result i32) + (local $$env i32) + (local $fns i32) + (local $v0 i32) + (local $3 i32) + (local $v1 i32) + (local $5 i32) + (local $v2 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $fns + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 20 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 21 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $$env + i32.const 30 + i32.store offset=12 + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 22 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + i32.add + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 1104 + i32.const 1152 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 256 + i32.const 1152 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1152 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureArray~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureArray (result i32) + (local $$env i32) + (local $arr i32) + (local $2 i32) + (local $sum i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=4 + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 26 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $sum + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/mutateCapturedArray~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.const 2 + i32.mul + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/mutateCapturedArray~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/array/Array#__get + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/mutateCapturedArray (result i32) + (local $$env i32) + (local $arr i32) + (local $2 i32) + (local $doubleAll i32) + (local $4 i32) + (local $sum i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=4 + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $$env + i32.load offset=4 + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 27 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $doubleAll + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 28 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $sum + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 250 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $doubleAll + local.tee $7 + i32.store offset=16 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $8 + i32.store offset=20 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 252 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $doubleAll + local.tee $9 + i32.store offset=24 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $sum + local.tee $10 + i32.store offset=28 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $closure-stress/Counter#set:value + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureClassInstance~anonymous|0 + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $closure-stress/Counter#get:value + i32.const 1 + i32.add + call $closure-stress/Counter#set:value + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureClassInstance~anonymous|1 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $closure-stress/Counter#get:value + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $closure-stress/mapArray (param $arr i32) (param $fn i32) (result i32) + (local $result i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + call $~lib/array/Array#constructor + local.tee $result + i32.store offset=4 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $i + global.get $~lib/memory/__stack_pointer + local.get $fn + local.tee $4 + i32.store offset=8 + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=16 + local.get $6 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $4 + local.tee $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $1) + call $~lib/array/Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testMapWithClosure (result i32) + (local $$env i32) + (local $multiplier i32) + (local $arr i32) + (local $3 i32) + (local $result i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 31 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + call $closure-stress/mapArray + local.tee $result + i32.store offset=12 + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/array/Array#__get + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + call $~lib/array/Array#__get + i32.add + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 2 + call $~lib/array/Array#__get + i32.add + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/array/Array#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 0 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/filterArray (param $arr i32) (param $pred i32) (result i32) + (local $result i32) + (local $i i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.tee $result + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $pred + local.tee $4 + i32.store offset=8 + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $4 + local.tee $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $1) + if + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=16 + local.get $6 + local.get $i + call $~lib/array/Array#__get + call $~lib/array/Array#push + drop + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testFilterWithClosure (result i32) + (local $$env i32) + (local $threshold i32) + (local $arr i32) + (local $i i32) + (local $4 i32) + (local $result i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + i32.const 0 + local.set $i + loop $for-loop|1 + local.get $i + i32.const 10 + i32.lt_s + if + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + local.get $i + call $~lib/array/Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 32 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $closure-stress/filterArray + local.tee $result + i32.store offset=12 + local.get $result + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $~lib/array/Array#get:length + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/reduceArray (param $arr i32) (param $fn i32) (param $initial i32) (result i32) + (local $acc i32) + (local $i i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $initial + local.set $acc + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/array/Array#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $fn + local.tee $5 + i32.store offset=4 + local.get $acc + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $i + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 2 + global.set $~argumentsLength + local.get $5 + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $4) + local.set $acc + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $acc + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure-stress/testReduceWithClosure (result i32) + (local $$env i32) + (local $bonus i32) + (local $arr i32) + (local $result i32) + (local $4 i32) + (local $addBonus i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 3 + i32.const 4 + call $~lib/array/Array#__set + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 4 + i32.const 5 + call $~lib/array/Array#__set + local.get $$env + local.get $arr + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1744 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=8 + local.get $7 + i32.const 0 + call $closure-stress/reduceArray + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 34 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $addBonus + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addBonus + local.tee $6 + i32.store offset=16 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $"~lib/map/Map#constructor" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $"~lib/map/Map#set:buckets" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + i32.const 1 + i32.sub + call $"~lib/map/Map#set:bucketsMask" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.const 4 + block $"~lib/map/ENTRY_SIZE|inlined.0" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.0" + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $"~lib/map/Map#set:entries" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + call $"~lib/map/Map#set:entriesCapacity" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $"~lib/map/Map#set:entriesOffset" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $"~lib/map/Map#set:entriesCount" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $"~lib/map/Map#find" (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:buckets" + local.get $hashCode + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:bucketsMask" + i32.and + i32.const 4 + i32.mul + i32.add + i32.load + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $"~lib/map/MapEntry#get:taggedNext" + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $"~lib/map/MapEntry#get:key" + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $entry + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $"~lib/map/Map#has" (param $this i32) (param $key i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $"~lib/map/Map#find" + i32.const 0 + i32.ne + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $"~lib/map/Map#get" (param $this i32) (param $key i32) (result i32) + (local $entry i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $"~lib/map/Map#find" + local.set $entry + local.get $entry + i32.eqz + if + i32.const 2000 + i32.const 2064 + i32.const 106 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $entry + call $"~lib/map/MapEntry#get:value" + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $"~lib/map/Map#rehash" (param $this i32) (param $newBucketsMask i32) + (local $newBucketsCapacity i32) + (local $newBuckets i32) + (local $newEntriesCapacity i32) + (local $newEntries i32) + (local $oldPtr i32) + (local $oldEnd i32) + (local $newPtr i32) + (local $oldEntry i32) + (local $newEntry i32) + (local $oldEntryKey i32) + (local $newBucketIndex i32) + (local $newBucketPtrBase i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $newBucketsMask + i32.const 1 + i32.add + local.set $newBucketsCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newBucketsCapacity + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newBuckets + i32.store + local.get $newBucketsCapacity + i32.const 8 + i32.mul + i32.const 3 + i32.div_s + local.set $newEntriesCapacity + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $newEntriesCapacity + block $"~lib/map/ENTRY_SIZE|inlined.1" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.1" + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $newEntries + i32.store offset=4 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/map/Map#get:entries" + local.set $oldPtr + local.get $oldPtr + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/map/Map#get:entriesOffset" + block $"~lib/map/ENTRY_SIZE|inlined.2" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.2" + end + i32.mul + i32.add + local.set $oldEnd + local.get $newEntries + local.set $newPtr + loop $while-continue|0 + local.get $oldPtr + local.get $oldEnd + i32.ne + if + local.get $oldPtr + local.set $oldEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:taggedNext" + i32.const 1 + i32.and + i32.eqz + if + local.get $newPtr + local.set $newEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:key" + local.set $oldEntryKey + local.get $newEntry + local.get $oldEntryKey + call $"~lib/map/MapEntry#set:key" + local.get $newEntry + local.get $oldEntry + call $"~lib/map/MapEntry#get:value" + call $"~lib/map/MapEntry#set:value" + local.get $oldEntryKey + call $~lib/util/hash/HASH + local.get $newBucketsMask + i32.and + local.set $newBucketIndex + local.get $newBuckets + local.get $newBucketIndex + i32.const 4 + i32.mul + i32.add + local.set $newBucketPtrBase + local.get $newEntry + local.get $newBucketPtrBase + i32.load + call $"~lib/map/MapEntry#set:taggedNext" + local.get $newBucketPtrBase + local.get $newPtr + i32.store + local.get $newPtr + block $"~lib/map/ENTRY_SIZE|inlined.3" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.3" + end + i32.add + local.set $newPtr + end + local.get $oldPtr + block $"~lib/map/ENTRY_SIZE|inlined.4" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.4" + end + i32.add + local.set $oldPtr + br $while-continue|0 + end + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newBuckets + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#set:buckets" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newBucketsMask + call $"~lib/map/Map#set:bucketsMask" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newEntries + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#set:entries" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $newEntriesCapacity + call $"~lib/map/Map#set:entriesCapacity" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=12 + local.get $14 + call $"~lib/map/Map#get:entriesCount" + call $"~lib/map/Map#set:entriesOffset" + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/map/Map#set" (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $entry i32) + (local $entries i32) + (local $6 i32) + (local $bucketPtrBase i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $key + local.get $hashCode + call $"~lib/map/Map#find" + local.set $entry + local.get $entry + if + local.get $entry + local.get $value + call $"~lib/map/MapEntry#set:value" + i32.const 0 + drop + else + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entriesOffset" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entriesCapacity" + i32.eq + if + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCount" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCapacity" + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + else + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + call $"~lib/map/Map#rehash" + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:entries" + local.tee $entries + i32.store offset=8 + local.get $entries + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesOffset" + local.tee $6 + i32.const 1 + i32.add + call $"~lib/map/Map#set:entriesOffset" + local.get $6 + block $"~lib/map/ENTRY_SIZE|inlined.5" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.5" + end + i32.mul + i32.add + local.set $entry + local.get $entry + local.get $key + call $"~lib/map/MapEntry#set:key" + i32.const 0 + drop + local.get $entry + local.get $value + call $"~lib/map/MapEntry#set:value" + i32.const 0 + drop + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/map/Map#get:entriesCount" + i32.const 1 + i32.add + call $"~lib/map/Map#set:entriesCount" + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:buckets" + local.get $hashCode + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + call $"~lib/map/Map#get:bucketsMask" + i32.and + i32.const 4 + i32.mul + i32.add + local.set $bucketPtrBase + local.get $entry + local.get $bucketPtrBase + i32.load + call $"~lib/map/MapEntry#set:taggedNext" + local.get $bucketPtrBase + local.get $entry + i32.store + end + local.get $this + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/memoize~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + call $"~lib/map/Map#has" + if + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + call $"~lib/map/Map#get" + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + local.get $x + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=8 + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + local.set $result + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $x + local.get $result + call $"~lib/map/Map#set" + drop + local.get $result + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/testMemoization (result i32) + (local $memoized i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 0 + global.set $closure-stress/callCount + global.get $~lib/memory/__stack_pointer + i32.const 1904 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $closure-stress/memoize + local.tee $memoized + i32.store offset=4 + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $1 + i32.store offset=8 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 413 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 414 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 415 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 416 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + i32.const 9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 417 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 418 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $memoized + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + i32.const 25 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 419 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 420 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/closureArrayOps (result i32) + (local $closures i32) + (local $i i32) + (local $captured i32) + (local $sum i32) + (local $i|4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $closures + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 10 + i32.lt_s + if + local.get $i + i32.const 10 + i32.mul + local.set $captured + local.get $closures + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i + local.get $captured + call $closure-stress/captureLoopValue + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 0 + local.set $sum + i32.const 0 + local.set $i|4 + loop $for-loop|1 + local.get $i|4 + i32.const 10 + i32.lt_s + if + local.get $sum + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $closures + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $i|4 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.add + local.set $sum + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|1 + end + end + local.get $sum + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize + i32.add + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 2912 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $right + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $closure-stress/mutateStringRef~anonymous|0 (param $suffix i32) + (local $$closureEnv i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $suffix + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String.__concat + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testRangeWithClosure (result i32) + (local $$env i32) + (local $sum i32) + (local $n i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 10 + local.set $n + i32.const 0 + local.get $n + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 66 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $closure-stress/range + local.get $$env + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/makeAdderPair (param $initial i32) (result i32) + (local $$env i32) + (local $value i32) + (local $arr i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $initial + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $arr + i32.store + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 73 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 74 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $arr + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testClosureEscapesFunction (result i32) + (local $pair i32) + (local $increment i32) + (local $getValue i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $pair2 i32) + (local $increment2 i32) + (local $getValue2 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $closure-stress/makeAdderPair + local.tee $pair + i32.store + global.get $~lib/memory/__stack_pointer + local.get $pair + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $increment + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $pair + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $getValue + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 730 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $6 + i32.store offset=28 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 733 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + call $closure-stress/makeAdderPair + local.tee $pair2 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $pair2 + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $increment2 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $pair2 + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $getValue2 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment2 + local.tee $10 + i32.store offset=44 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue2 + local.tee $11 + i32.store offset=48 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $0) + i32.const 101 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 741 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $12 + i32.store offset=52 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const 12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 742 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue + local.tee $13 + i32.store offset=56 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getValue2 + local.tee $14 + i32.store offset=60 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + i32.add + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 64 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $start:closure-stress + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + global.get $~lib/memory/__stack_pointer + i32.const 180 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 180 + memory.fill + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 208 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 352 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 42 + call $closure-stress/captureI32Param + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 13 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const -1 + call $closure-stress/captureI32Param + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 2147483647 + call $closure-stress/captureI32Param + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 2147483647 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i64.const 42 + call $closure-stress/captureI64Param + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $10) + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i64.const 9223372036854775807 + call $closure-stress/captureI64Param + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $10) + i64.const 9223372036854775807 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f32.const 3.140000104904175 + call $closure-stress/captureF32Param + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $11) + f32.const 3.140000104904175 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f32.const 0 + call $closure-stress/captureF32Param + local.tee $6 + i32.store offset=24 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $11) + f32.const 0 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f64.const 3.141592653589793 + call $closure-stress/captureF64Param + local.tee $7 + i32.store offset=28 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $7) + f64.const 3.141592653589793 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + f64.const inf + call $closure-stress/captureF64Param + local.tee $8 + i32.store offset=32 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $7) + f64.const inf + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + call $closure-stress/captureBool + local.tee $9 + i32.store offset=36 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $closure-stress/captureBool + local.tee $10 + i32.store offset=40 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + i32.const 3 + call $closure-stress/captureMultipleI32 + local.tee $11 + i32.store offset=44 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $0) + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 100 + i32.const 200 + i32.const 300 + call $closure-stress/captureMultipleI32 + local.tee $12 + i32.store offset=48 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $0) + i32.const 600 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i64.const 2 + f32.const 3 + f64.const 4 + call $closure-stress/captureMixedTypes + local.tee $13 + i32.store offset=52 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $7) + f64.const 10 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + i32.const 3 + i32.const 4 + i32.const 5 + i32.const 6 + i32.const 7 + i32.const 8 + call $closure-stress/capture8Params + local.tee $14 + i32.store offset=56 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + i32.const 36 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + i32.const 2 + call $closure-stress/captureParamsAndLocals + local.tee $15 + i32.store offset=60 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $0) + i32.const 303 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $16 + i32.store offset=64 + local.get $16 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $17 + i32.store offset=68 + local.get $17 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $0) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $18 + i32.store offset=72 + local.get $18 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $0) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter2 + local.tee $19 + i32.store offset=76 + local.get $19 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 96 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/counter1 + local.tee $20 + i32.store offset=80 + local.get $20 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $20 + i32.load + call_indirect (type $0) + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 97 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testBidirectionalMutation + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testSharedMutation + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 127 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testOuterScopeMutation + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 142 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 10 + call $closure-stress/curriedAdd + global.set $closure-stress/addTo10 + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addTo10 + local.tee $21 + i32.store offset=84 + local.get $21 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $21 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 153 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addTo10 + local.tee $22 + i32.store offset=88 + local.get $22 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $22 + i32.load + call_indirect (type $1) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 154 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeGreaterThan + global.set $closure-stress/greaterThan5 + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/greaterThan5 + local.tee $23 + i32.store offset=92 + local.get $23 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $23 + i32.load + call_indirect (type $1) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/greaterThan5 + local.tee $24 + i32.store offset=96 + local.get $24 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $24 + i32.load + call_indirect (type $1) + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 162 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/simpleClosureArray + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 183 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure-stress/closureInConditional + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $closure-stress/closureInConditional + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/closureEscapingBlock + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureArray + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 233 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/mutateCapturedArray + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureClassInstance + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 280 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testMapWithClosure + i32.const 60 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 306 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testFilterWithClosure + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 330 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testReduceWithClosure + i32.const 115 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeAdder + global.set $closure-stress/add5 + i32.const 10 + call $closure-stress/makeAdder + global.set $closure-stress/add10 + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add5 + local.tee $25 + i32.store offset=100 + local.get $25 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $25 + i32.load + call_indirect (type $1) + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 369 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add10 + local.tee $26 + i32.store offset=104 + local.get $26 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $26 + i32.load + call_indirect (type $1) + i32.const 13 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 370 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $28 + i32.store offset=108 + i32.const 0 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/add10 + local.tee $27 + i32.store offset=116 + local.get $27 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $27 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $28 + local.tee $29 + i32.store offset=112 + local.get $29 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $29 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 371 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure-stress/makeMultiplier + global.set $closure-stress/double + i32.const 3 + call $closure-stress/makeMultiplier + global.set $closure-stress/triple + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/double + local.tee $30 + i32.store offset=120 + local.get $30 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $30 + i32.load + call_indirect (type $1) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 379 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/triple + local.tee $31 + i32.store offset=124 + local.get $31 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $31 + i32.load + call_indirect (type $1) + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 380 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $33 + i32.store offset=128 + i32.const 4 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/triple + local.tee $32 + i32.store offset=136 + local.get $32 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $32 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $33 + local.tee $34 + i32.store offset=132 + local.get $34 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $34 + i32.load + call_indirect (type $1) + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 381 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/double + local.set $43 + global.get $~lib/memory/__stack_pointer + local.get $43 + i32.store offset=140 + local.get $43 + global.get $closure-stress/add5 + local.set $43 + global.get $~lib/memory/__stack_pointer + local.get $43 + i32.store offset=144 + local.get $43 + call $closure-stress/compose + global.set $closure-stress/addThenDouble + i32.const 3 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/addThenDouble + local.tee $35 + i32.store offset=148 + local.get $35 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $35 + i32.load + call_indirect (type $1) + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 388 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testMemoization + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 424 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + call $closure-stress/emptyClosure + local.tee $36 + i32.store offset=152 + local.get $36 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $36 + i32.load + call_indirect (type $0) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 434 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureOnlyNoParams + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 443 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/ignoreCapture + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 451 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $closure-stress/multipleClosureReturns + local.tee $37 + i32.store offset=156 + local.get $37 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $37 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 467 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 1 + call $closure-stress/multipleClosureReturns + local.tee $38 + i32.store offset=160 + local.get $38 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $38 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 468 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 2 + call $closure-stress/multipleClosureReturns + local.tee $39 + i32.store offset=164 + local.get $39 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $39 + i32.load + call_indirect (type $0) + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 469 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeFactorial + global.set $closure-stress/fact + i32.const 5 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/fact + local.tee $40 + i32.store offset=168 + local.get $40 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $40 + i32.load + call_indirect (type $1) + i32.const 120 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 483 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 6 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + global.get $closure-stress/fact + local.tee $41 + i32.store offset=172 + local.get $41 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $41 + i32.load + call_indirect (type $1) + i32.const 720 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 484 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureSmallTypes + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 496 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/manyClosuresSameEnv + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 517 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/manyCaptures + i32.const 78 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 529 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/simpleIIFE + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 539 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/closureArrayOps + i32.const 450 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 564 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/interleavedClosures + i32.const 123 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 585 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/captureString + local.set $43 + global.get $~lib/memory/__stack_pointer + local.get $43 + i32.store offset=140 + local.get $43 + i32.const 2816 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 597 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/mutateStringRef + local.set $43 + global.get $~lib/memory/__stack_pointer + local.get $43 + i32.store offset=140 + local.get $43 + i32.const 3104 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 611 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testNestedClosureFunctions + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 634 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testRangeWithClosure + i32.const 45 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 654 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + i32.const 4 + call $closure-stress/add + global.set $closure-stress/addResult + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure-stress/addResult + local.tee $42 + i32.store offset=176 + local.get $42 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $42 + i32.load + call_indirect (type $0) + i32.const 7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testTwoClosuresSameVar + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 682 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testDeeplyNestedClosures + i32.const 111 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 707 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/testClosureEscapesFunction + i32.const 113 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 746 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + global.get $~lib/memory/__stack_pointer + i32.const 180 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testBidirectionalMutation (result i32) + (local $$env i32) + (local $value i32) + (local $2 i32) + (local $setter i32) + (local $4 i32) + (local $getter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 11 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $setter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 12 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getter + i32.store offset=4 + i32.const 10 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 20 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 108 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $10 + i32.store offset=24 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/testSharedMutation (result i32) + (local $$env i32) + (local $value i32) + (local $2 i32) + (local $inc i32) + (local $4 i32) + (local $dec i32) + (local $6 i32) + (local $get i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 13 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 14 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $dec + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 15 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $get + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $dec + local.tee $11 + i32.store offset=24 + local.get $11 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $11 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $12 + i32.store offset=28 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $13 + i32.store offset=32 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $14 + i32.store offset=36 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $0) + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $closure-stress/testOuterScopeMutation (result i32) + (local $$env i32) + (local $value i32) + (local $2 i32) + (local $double i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 16 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $double + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 17 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $double + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $double + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 138 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $10 + i32.store offset=24 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $closure-stress/closureInConditional (param $useFirst i32) (result i32) + (local $$env i32) + (local $a i32) + (local $b i32) + (local $getter i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + local.get $useFirst + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 23 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $getter + i32.store + else + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 24 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $getter + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=4 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/closureEscapingBlock (result i32) + (local $$env i32) + (local $value i32) + (local $captured i32) + (local $inner i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + i32.const 0 + local.set $value + local.get $$env + i32.const 42 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 25 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $captured + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $captured + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $value + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $captured + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/captureClassInstance (result i32) + (local $$env i32) + (local $c i32) + (local $2 i32) + (local $inc i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + call $closure-stress/Counter#constructor + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 29 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 30 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/compose~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/__closure_env + local.set $$closureEnv + global.get $~lib/memory/__stack_pointer + local.get $$closureEnv + i32.load offset=4 + local.tee $3 + i32.store + local.get $x + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $$closureEnv + i32.load offset=8 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $3 + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 1104 + i32.const 1936 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureOnlyNoParams (result i32) + (local $$env i32) + (local $x i32) + (local $y i32) + (local $3 i32) + (local $fn i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + local.get $$env + i32.const 20 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 41 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/ignoreCapture (result i32) + (local $unused i32) + (local $fn i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 999 + local.set $unused + global.get $~lib/memory/__stack_pointer + i32.const 2208 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure-stress/captureSmallTypes (result i32) + (local $$env i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $5 i32) + (local $fn i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 10 + i32.store8 offset=4 + local.get $$env + i32.const 20 + i32.store8 offset=5 + local.get $$env + i32.const 30 + i32.store16 offset=6 + local.get $$env + i32.const 40 + i32.store16 offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 47 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $7 + i32.store offset=4 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure-stress/manyClosuresSameEnv (result i32) + (local $$env i32) + (local $value i32) + (local $2 i32) + (local $inc1 i32) + (local $4 i32) + (local $inc2 i32) + (local $6 i32) + (local $inc3 i32) + (local $8 i32) + (local $inc4 i32) + (local $10 i32) + (local $inc5 i32) + (local $12 i32) + (local $get i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 48 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 48 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inc1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 49 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $inc2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 50 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + local.tee $inc3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $8 + local.get $8 + i32.const 51 + i32.store + local.get $8 + local.get $$env + i32.store offset=4 + local.get $8 + local.tee $inc4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $10 + local.get $10 + i32.const 52 + i32.store + local.get $10 + local.get $$env + i32.store offset=4 + local.get $10 + local.tee $inc5 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $12 + local.get $12 + i32.const 53 + i32.store + local.get $12 + local.get $$env + i32.store offset=4 + local.get $12 + local.tee $get + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc1 + local.tee $14 + i32.store offset=24 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc2 + local.tee $15 + i32.store offset=28 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc3 + local.tee $16 + i32.store offset=32 + local.get $16 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc4 + local.tee $17 + i32.store offset=36 + local.get $17 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $17 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inc5 + local.tee $18 + i32.store offset=40 + local.get $18 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $18 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $19 + i32.store offset=44 + local.get $19 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $19 + i32.load + call_indirect (type $0) + local.set $20 + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $20 + return + ) + (func $closure-stress/manyCaptures (result i32) + (local $$env i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $d i32) + (local $e i32) + (local $f i32) + (local $g i32) + (local $h i32) + (local $i i32) + (local $j i32) + (local $k i32) + (local $l i32) + (local $13 i32) + (local $fn i32) + (local $15 i32) + (local $16 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 52 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + local.get $$env + i32.const 2 + i32.store offset=8 + local.get $$env + i32.const 3 + i32.store offset=12 + local.get $$env + i32.const 4 + i32.store offset=16 + local.get $$env + i32.const 5 + i32.store offset=20 + local.get $$env + i32.const 6 + i32.store offset=24 + local.get $$env + i32.const 7 + i32.store offset=28 + local.get $$env + i32.const 8 + i32.store offset=32 + local.get $$env + i32.const 9 + i32.store offset=36 + local.get $$env + i32.const 10 + i32.store offset=40 + local.get $$env + i32.const 11 + i32.store offset=44 + local.get $$env + i32.const 12 + i32.store offset=48 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $13 + local.get $13 + i32.const 54 + i32.store + local.get $13 + local.get $$env + i32.store offset=4 + local.get $13 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $15 + i32.store offset=4 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $0) + local.set $16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $16 + return + ) + (func $closure-stress/simpleIIFE (result i32) + (local $$env i32) + (local $v1 i32) + (local $2 i32) + (local $3 i32) + (local $result i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 55 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $3 + i32.store + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.set $result + local.get $result + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/interleavedClosures (result i32) + (local $$env i32) + (local $total i32) + (local $2 i32) + (local $get i32) + (local $4 i32) + (local $add1 i32) + (local $6 i32) + (local $7 i32) + (local $add10 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $add100 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 57 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $get + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 58 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $add1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 59 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.tee $add10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $11 + local.get $11 + i32.const 60 + i32.store + local.get $11 + local.get $$env + i32.store offset=4 + local.get $11 + local.tee $add100 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add1 + local.tee $13 + i32.store offset=28 + local.get $13 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $13 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add10 + local.tee $14 + i32.store offset=32 + local.get $14 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $14 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $add100 + local.tee $15 + i32.store offset=36 + local.get $15 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $15 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $16 + i32.store offset=40 + local.get $16 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $16 + i32.load + call_indirect (type $0) + local.set $17 + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return + ) + (func $closure-stress/captureString (result i32) + (local $$env i32) + (local $s i32) + (local $2 i32) + (local $fn i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 2816 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 61 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/mutateStringRef (result i32) + (local $$env i32) + (local $s i32) + (local $2 i32) + (local $append i32) + (local $4 i32) + (local $get i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 2880 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 19 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 62 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $append + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 63 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $get + i32.store offset=4 + i32.const 3008 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + i32.const 3040 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $5) + i32.const 3072 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $append + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $get + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + (local $innerInner i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $1 + local.get $1 + i32.const 64 + i32.store + local.get $1 + local.get $$closureEnv + i32.store offset=4 + local.get $1 + local.tee $innerInner + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $innerInner + local.tee $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + drop + local.get $$closureEnv + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $closure-stress/testNestedClosureFunctions (result i32) + (local $$env i32) + (local $x i32) + (local $2 i32) + (local $inner i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 65 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $inner + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $inner + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure-stress/testTwoClosuresSameVar (result i32) + (local $$env i32) + (local $a i32) + (local $2 i32) + (local $b i32) + (local $4 i32) + (local $c i32) + (local $6 i32) + (local $br i32) + (local $8 i32) + (local $cr i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 68 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $b + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 69 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $c + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $b + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + local.set $br + local.get $br + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 675 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $c + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + local.set $cr + local.get $cr + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 677 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 678 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.load offset=4 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $level3 i32) + (local $3 i32) + (local $fn3 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 70 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn3 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $$env i32) + (local $level2 i32) + (local $3 i32) + (local $fn2 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + local.get $$closureEnv + i32.store + local.get $$env + i32.const 10 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 71 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $fn2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn2 + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure-stress/testDeeplyNestedClosures (result i32) + (local $$env i32) + (local $level1 i32) + (local $2 i32) + (local $fn1 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 72 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn1 + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1104 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1296 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2000 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>i64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i64>#__visit + ) + (func $~lib/function/Function<%28%29=>f32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f32>#__visit + ) + (func $~lib/function/Function<%28%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>#__visit + ) + (func $~lib/function/Function<%28%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>#__visit + ) + (func $~lib/array/Array<%28%29=>i32>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28~lib/string/String%29=>void> + block $~lib/function/Function<%28%29=>~lib/string/String> + block $"~lib/map/Map" + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $closure-stress/Counter + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/function/Function<%28i32%29=>bool> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $~lib/function/Function<%28i32%29=>void> + block $~lib/function/Function<%28%29=>bool> + block $~lib/function/Function<%28%29=>f64> + block $~lib/function/Function<%28%29=>f32> + block $~lib/function/Function<%28%29=>i64> + block $~lib/function/Function<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28%29=>i64> $~lib/function/Function<%28%29=>f32> $~lib/function/Function<%28%29=>f64> $~lib/function/Function<%28%29=>bool> $~lib/function/Function<%28i32%29=>void> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28i32%29=>bool> $~lib/array/Array<%28%29=>i32> $~lib/array/Array $closure-stress/Counter $~lib/function/Function<%28i32%2Ci32%29=>i32> $"~lib/map/Map" $~lib/function/Function<%28%29=>~lib/string/String> $~lib/function/Function<%28~lib/string/String%29=>void> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%29=>void>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>i64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>f32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>f32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>f64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>f64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/map/Map#__visit" (param $this i32) (param $cookie i32) + (local $entries i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/map/Map#get:buckets" + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/map/Map#get:entries" + local.set $entries + i32.const 0 + drop + local.get $entries + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>~lib/string/String>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/string/String%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/string/String%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure-stress.json b/tests/compiler/closure-stress.json new file mode 100644 index 0000000000..454738fb3d --- /dev/null +++ b/tests/compiler/closure-stress.json @@ -0,0 +1,5 @@ +{ + "asc_flags": [ + "--enable", "closures" + ] +} diff --git a/tests/compiler/closure-stress.release.wat b/tests/compiler/closure-stress.release.wat new file mode 100644 index 0000000000..a03c5eb60a --- /dev/null +++ b/tests/compiler/closure-stress.release.wat @@ -0,0 +1,9526 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func)) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (result f64))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32))) + (type $8 (func (result i64))) + (type $9 (func (result f32))) + (type $10 (func (param i32 i32 i32 i32))) + (type $11 (func (param i32 i32 i32) (result i32))) + (type $12 (func (param i32 i32 i64))) + (type $13 (func (param i64) (result i32))) + (type $14 (func (param f64) (result i32))) + (type $15 (func (param f32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $closure-stress/counter1 (mut i32) (i32.const 0)) + (global $closure-stress/counter2 (mut i32) (i32.const 0)) + (global $closure-stress/addTo10 (mut i32) (i32.const 0)) + (global $closure-stress/greaterThan5 (mut i32) (i32.const 0)) + (global $closure-stress/add5 (mut i32) (i32.const 0)) + (global $closure-stress/add10 (mut i32) (i32.const 0)) + (global $closure-stress/double (mut i32) (i32.const 0)) + (global $closure-stress/triple (mut i32) (i32.const 0)) + (global $closure-stress/addThenDouble (mut i32) (i32.const 0)) + (global $closure-stress/callCount (mut i32) (i32.const 0)) + (global $closure-stress/fact (mut i32) (i32.const 0)) + (global $closure-stress/addResult (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 37348)) + (memory $0 1) + (data $0 (i32.const 1036) "\1c") + (data $0.1 (i32.const 1048) "\04\00\00\00\08\00\00\00\01") + (data $1 (i32.const 1068) "<") + (data $1.1 (i32.const 1080) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $2 (i32.const 1132) "<") + (data $2.1 (i32.const 1144) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $5 (i32.const 1260) "<") + (data $5.1 (i32.const 1272) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $6 (i32.const 1324) ",") + (data $6.1 (i32.const 1336) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $8 (i32.const 1404) "<") + (data $8.1 (i32.const 1416) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $9 (i32.const 1468) "<") + (data $9.1 (i32.const 1480) "\02\00\00\00\"\00\00\00c\00l\00o\00s\00u\00r\00e\00-\00s\00t\00r\00e\00s\00s\00.\00t\00s") + (data $10 (i32.const 1532) "\1c") + (data $10.1 (i32.const 1544) "\05\00\00\00\08\00\00\00\02") + (data $11 (i32.const 1564) "\1c") + (data $11.1 (i32.const 1576) "\06\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1596) "\1c") + (data $12.1 (i32.const 1608) "\07\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1628) "\1c") + (data $13.1 (i32.const 1640) "\08\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1660) "\1c") + (data $14.1 (i32.const 1672) "\04\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1692) "\1c") + (data $15.1 (i32.const 1704) "\07\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1724) "\1c") + (data $16.1 (i32.const 1736) "\04\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1756) "\1c") + (data $17.1 (i32.const 1768) "\04\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1788) "\1c") + (data $18.1 (i32.const 1800) "\04\00\00\00\08\00\00\00\n") + (data $19 (i32.const 1820) "\1c") + (data $19.1 (i32.const 1832) "\t\00\00\00\08\00\00\00\0b") + (data $20 (i32.const 1852) "\1c") + (data $20.1 (i32.const 1864) "\04\00\00\00\08\00\00\00\0c") + (data $21 (i32.const 1884) "\1c") + (data $21.1 (i32.const 1896) "\n\00\00\00\08\00\00\00\r") + (data $22 (i32.const 1916) "\1c") + (data $22.1 (i32.const 1928) "\n\00\00\00\08\00\00\00\0e") + (data $23 (i32.const 1948) "\1c") + (data $23.1 (i32.const 1960) "\04\00\00\00\08\00\00\00\0f") + (data $24 (i32.const 1980) "\1c") + (data $24.1 (i32.const 1992) "\n\00\00\00\08\00\00\00\10") + (data $25 (i32.const 2012) "\1c") + (data $25.1 (i32.const 2024) "\04\00\00\00\08\00\00\00\11") + (data $26 (i32.const 2044) "\1c") + (data $26.1 (i32.const 2056) "\0b\00\00\00\08\00\00\00\12") + (data $27 (i32.const 2076) "\1c") + (data $27.1 (i32.const 2088) "\0c\00\00\00\08\00\00\00\13") + (data $28 (i32.const 2108) ",") + (data $28.1 (i32.const 2120) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $29 (i32.const 2156) ",") + (data $29.1 (i32.const 2168) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $30 (i32.const 2204) "\1c") + (data $30.1 (i32.const 2216) "\04\00\00\00\08\00\00\00\14") + (data $31 (i32.const 2236) "\1c") + (data $31.1 (i32.const 2248) "\04\00\00\00\08\00\00\00\15") + (data $32 (i32.const 2268) "\1c") + (data $32.1 (i32.const 2280) "\04\00\00\00\08\00\00\00\16") + (data $33 (i32.const 2300) "|") + (data $33.1 (i32.const 2312) "\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data $34 (i32.const 2428) "\1c") + (data $34.1 (i32.const 2440) "\04\00\00\00\08\00\00\00\17") + (data $35 (i32.const 2460) "\1c") + (data $35.1 (i32.const 2472) "\04\00\00\00\08\00\00\00\18") + (data $36 (i32.const 2492) "\1c") + (data $36.1 (i32.const 2504) "\04\00\00\00\08\00\00\00\19") + (data $37 (i32.const 2524) "\1c") + (data $37.1 (i32.const 2536) "\04\00\00\00\08\00\00\00\1a") + (data $38 (i32.const 2556) "\1c") + (data $38.1 (i32.const 2568) "\n\00\00\00\08\00\00\00\1b") + (data $39 (i32.const 2588) "\1c") + (data $39.1 (i32.const 2600) "\04\00\00\00\08\00\00\00\1c") + (data $40 (i32.const 2620) "\1c") + (data $40.1 (i32.const 2632) "\n\00\00\00\08\00\00\00\1d") + (data $41 (i32.const 2652) "\1c") + (data $41.1 (i32.const 2664) "\04\00\00\00\08\00\00\00\1e") + (data $42 (i32.const 2684) "\1c") + (data $42.1 (i32.const 2696) "\0b\00\00\00\08\00\00\00\1f") + (data $43 (i32.const 2716) "\1c") + (data $43.1 (i32.const 2728) "\0c\00\00\00\08\00\00\00 ") + (data $44 (i32.const 2748) "\1c") + (data $44.1 (i32.const 2760) "\10\00\00\00\08\00\00\00!") + (data $45 (i32.const 2780) "\1c") + (data $45.1 (i32.const 2792) "\04\00\00\00\08\00\00\00\"") + (data $46 (i32.const 2812) "\1c") + (data $46.1 (i32.const 2824) "\0b\00\00\00\08\00\00\00#") + (data $47 (i32.const 2844) "\1c") + (data $47.1 (i32.const 2856) "\0b\00\00\00\08\00\00\00$") + (data $48 (i32.const 2876) "\1c") + (data $48.1 (i32.const 2888) "\0b\00\00\00\08\00\00\00%") + (data $49 (i32.const 2908) "\1c") + (data $49.1 (i32.const 2920) "\0b\00\00\00\08\00\00\00&") + (data $50 (i32.const 2940) "<") + (data $50.1 (i32.const 2952) "\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s") + (data $51 (i32.const 3004) "<") + (data $51.1 (i32.const 3016) "\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t") + (data $52 (i32.const 3068) ",") + (data $52.1 (i32.const 3080) "\02\00\00\00\16\00\00\00~\00l\00i\00b\00/\00m\00a\00p\00.\00t\00s") + (data $53 (i32.const 3116) "\1c") + (data $53.1 (i32.const 3128) "\0b\00\00\00\08\00\00\00\'") + (data $54 (i32.const 3148) "\1c") + (data $54.1 (i32.const 3160) "\04\00\00\00\08\00\00\00(") + (data $55 (i32.const 3180) "\1c") + (data $55.1 (i32.const 3192) "\04\00\00\00\08\00\00\00)") + (data $56 (i32.const 3212) "\1c") + (data $56.1 (i32.const 3224) "\04\00\00\00\08\00\00\00*") + (data $57 (i32.const 3244) "\1c") + (data $57.1 (i32.const 3256) "\04\00\00\00\08\00\00\00+") + (data $58 (i32.const 3276) "\1c") + (data $58.1 (i32.const 3288) "\04\00\00\00\08\00\00\00,") + (data $59 (i32.const 3308) "\1c") + (data $59.1 (i32.const 3320) "\04\00\00\00\08\00\00\00-") + (data $60 (i32.const 3340) "\1c") + (data $60.1 (i32.const 3352) "\0b\00\00\00\08\00\00\00.") + (data $61 (i32.const 3372) "\1c") + (data $61.1 (i32.const 3384) "\04\00\00\00\08\00\00\00/") + (data $62 (i32.const 3404) "\1c") + (data $62.1 (i32.const 3416) "\n\00\00\00\08\00\00\000") + (data $63 (i32.const 3436) "\1c") + (data $63.1 (i32.const 3448) "\n\00\00\00\08\00\00\001") + (data $64 (i32.const 3468) "\1c") + (data $64.1 (i32.const 3480) "\n\00\00\00\08\00\00\002") + (data $65 (i32.const 3500) "\1c") + (data $65.1 (i32.const 3512) "\n\00\00\00\08\00\00\003") + (data $66 (i32.const 3532) "\1c") + (data $66.1 (i32.const 3544) "\n\00\00\00\08\00\00\004") + (data $67 (i32.const 3564) "\1c") + (data $67.1 (i32.const 3576) "\04\00\00\00\08\00\00\005") + (data $68 (i32.const 3596) "\1c") + (data $68.1 (i32.const 3608) "\04\00\00\00\08\00\00\006") + (data $69 (i32.const 3628) "\1c") + (data $69.1 (i32.const 3640) "\04\00\00\00\08\00\00\007") + (data $70 (i32.const 3660) "\1c") + (data $70.1 (i32.const 3672) "\04\00\00\00\08\00\00\008") + (data $71 (i32.const 3692) "\1c") + (data $71.1 (i32.const 3704) "\04\00\00\00\08\00\00\009") + (data $72 (i32.const 3724) "\1c") + (data $72.1 (i32.const 3736) "\n\00\00\00\08\00\00\00:") + (data $73 (i32.const 3756) "\1c") + (data $73.1 (i32.const 3768) "\n\00\00\00\08\00\00\00;") + (data $74 (i32.const 3788) "\1c") + (data $74.1 (i32.const 3800) "\n\00\00\00\08\00\00\00<") + (data $75 (i32.const 3820) "\1c") + (data $75.1 (i32.const 3832) "\02\00\00\00\n\00\00\00H\00e\00l\00l\00o") + (data $76 (i32.const 3852) "\1c") + (data $76.1 (i32.const 3864) "\12\00\00\00\08\00\00\00=") + (data $77 (i32.const 3884) "\1c") + (data $77.1 (i32.const 3896) "\02\00\00\00\02\00\00\00A") + (data $78 (i32.const 3916) "\1c") + (data $78.1 (i32.const 3928) "\02") + (data $79 (i32.const 3948) "\1c") + (data $79.1 (i32.const 3960) "\13\00\00\00\08\00\00\00>") + (data $80 (i32.const 3980) "\1c") + (data $80.1 (i32.const 3992) "\12\00\00\00\08\00\00\00?") + (data $81 (i32.const 4012) "\1c") + (data $81.1 (i32.const 4024) "\02\00\00\00\02\00\00\00B") + (data $82 (i32.const 4044) "\1c") + (data $82.1 (i32.const 4056) "\02\00\00\00\02\00\00\00C") + (data $83 (i32.const 4076) "\1c") + (data $83.1 (i32.const 4088) "\02\00\00\00\02\00\00\00D") + (data $84 (i32.const 4108) "\1c") + (data $84.1 (i32.const 4120) "\02\00\00\00\08\00\00\00A\00B\00C\00D") + (data $85 (i32.const 4140) "\1c") + (data $85.1 (i32.const 4152) "\04\00\00\00\08\00\00\00@") + (data $86 (i32.const 4172) "\1c") + (data $86.1 (i32.const 4184) "\04\00\00\00\08\00\00\00A") + (data $87 (i32.const 4204) "\1c") + (data $87.1 (i32.const 4216) "\t\00\00\00\08\00\00\00B") + (data $88 (i32.const 4236) "\1c") + (data $88.1 (i32.const 4248) "\04\00\00\00\08\00\00\00C") + (data $89 (i32.const 4268) "\1c") + (data $89.1 (i32.const 4280) "\04\00\00\00\08\00\00\00D") + (data $90 (i32.const 4300) "\1c") + (data $90.1 (i32.const 4312) "\04\00\00\00\08\00\00\00E") + (data $91 (i32.const 4332) "\1c") + (data $91.1 (i32.const 4344) "\04\00\00\00\08\00\00\00F") + (data $92 (i32.const 4364) "\1c") + (data $92.1 (i32.const 4376) "\04\00\00\00\08\00\00\00G") + (data $93 (i32.const 4396) "\1c") + (data $93.1 (i32.const 4408) "\04\00\00\00\08\00\00\00H") + (data $94 (i32.const 4428) "\1c") + (data $94.1 (i32.const 4440) "\04\00\00\00\08\00\00\00I") + (data $95 (i32.const 4460) "\1c") + (data $95.1 (i32.const 4472) "\04\00\00\00\08\00\00\00J") + (data $96 (i32.const 4496) "\14\00\00\00 \00\00\00 \00\00\00 ") + (data $96.1 (i32.const 4552) "\02A\00\00\02\t\00\00 \00\00\00\00\00\00\00\10\t\12") + (table $0 75 75 funcref) + (elem $0 (i32.const 1) $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI64Param~anonymous|0 $closure-stress/captureF32Param~anonymous|0 $closure-stress/captureF64Param~anonymous|0 $closure-stress/captureBool~anonymous|0 $closure-stress/captureMultipleI32~anonymous|0 $closure-stress/captureMixedTypes~anonymous|0 $closure-stress/capture8Params~anonymous|0 $closure-stress/captureParamsAndLocals~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testBidirectionalMutation~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/testSharedMutation~anonymous|1 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testOuterScopeMutation~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/curriedAdd~anonymous|0 $closure-stress/makeGreaterThan~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/mutateCapturedArray~anonymous|0 $closure-stress/captureArray~anonymous|0 $closure-stress/captureClassInstance~anonymous|0 $closure-stress/captureClassInstance~anonymous|1 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/testFilterWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/makeAdder~anonymous|0 $closure-stress/testMapWithClosure~anonymous|0 $closure-stress/compose~anonymous|0 $closure-stress/expensiveComputation $closure-stress/memoize~anonymous|0 $closure-stress/emptyClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/emptyClosure~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/simpleClosureArray~anonymous|1 $closure-stress/simpleClosureArray~anonymous|2 $closure-stress/makeFactorial~anonymous|0 $closure-stress/captureSmallTypes~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/manyClosuresSameEnv~anonymous|1 $closure-stress/manyClosuresSameEnv~anonymous|2 $closure-stress/manyClosuresSameEnv~anonymous|3 $closure-stress/manyClosuresSameEnv~anonymous|4 $closure-stress/captureI32Param~anonymous|0 $closure-stress/manyCaptures~anonymous|0 $closure-stress/simpleIIFE~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/captureI32Param~anonymous|0 $closure-stress/testSharedMutation~anonymous|0 $closure-stress/interleavedClosures~anonymous|2 $closure-stress/interleavedClosures~anonymous|3 $closure-stress/captureString~anonymous|0 $closure-stress/mutateStringRef~anonymous|0 $closure-stress/captureString~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testNestedClosureFunctions~anonymous|0 $closure-stress/testRangeWithClosure~anonymous|0 $closure-stress/testReduceWithClosure~anonymous|1 $closure-stress/captureI32Param~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 $closure-stress/testDeeplyNestedClosures~anonymous|0 $closure-stress/makeCounter~anonymous|0 $closure-stress/captureI32Param~anonymous|0) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1088 + i32.const 1152 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 37360 + i32.const 0 + i32.store + i32.const 38928 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 37360 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 37360 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 37360 + i32.const 38932 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 37360 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1088 + i32.const 1424 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + memory.size + local.tee $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $1 + local.get $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1424 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1280 + i32.const 2176 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1280 + i32.const 2176 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureI32Param~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1280 + i32.const 2176 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2320 + i32.const 2176 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1280 + i32.const 2176 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 1073741820 + i32.gt_u + if + i32.const 2128 + i32.const 2960 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-stress/makeCounter~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load offset=4 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1424 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$369 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 37348 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$369 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 4496 + i32.load + i32.gt_u + if + i32.const 1280 + i32.const 1344 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 4500 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $invalid + block $"~lib/map/Map" + block $closure-stress/Counter + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $folding-inner1 $~lib/array/Array<%28%29=>i32> $~lib/array/Array $closure-stress/Counter $folding-inner1 $"~lib/map/Map" $folding-inner1 $folding-inner1 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + br $folding-inner2 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + br $folding-inner2 + end + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/map/Map#find" (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + local.set $0 + loop $while-continue|0 + local.get $0 + if + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 1 + i32.and + if (result i32) + i32.const 0 + else + local.get $1 + local.get $0 + i32.load + i32.eq + end + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + local.get $2 + i32.const -2 + i32.and + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $~lib/array/ensureCapacity (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$299 + i32.const 1073741820 + local.get $2 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.tee $3 + local.get $0 + i32.load + local.tee $2 + i32.const 20 + i32.sub + local.tee $4 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $4 + local.get $3 + i32.store offset=16 + local.get $2 + local.set $1 + br $__inlined_func$~lib/rt/itcms/__renew$299 + end + local.get $3 + local.get $4 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $2 + local.get $3 + local.get $4 + i32.load offset=16 + local.tee $4 + local.get $3 + local.get $4 + i32.lt_u + select + memory.copy + end + local.get $1 + local.get $2 + i32.ne + if + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $3 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 2128 + i32.const 2176 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $closure-stress/testSharedMutation~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testReduceWithClosure~anonymous|1 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + ) + (func $closure-stress/simpleClosureArray~anonymous|1 (result i32) + global.get $~lib/__closure_env + i32.load offset=8 + ) + (func $closure-stress/multipleClosureReturns (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + i32.const 10 + i32.store offset=8 + local.get $2 + i32.const 20 + i32.store offset=12 + local.get $2 + i32.const 30 + i32.store offset=16 + local.get $0 + if + local.get $0 + i32.const 1 + i32.eq + if + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 44 + i32.store + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 45 + i32.store + end + else + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 43 + i32.store + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureI32Param (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + block $folding-inner0 + local.get $1 + i32.eqz + local.get $0 + i32.eqz + i32.or + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $3 + local.tee $0 + i32.const 4 + i32.ge_u + if (result i32) + local.get $2 + i32.const 7 + i32.and + local.get $1 + i32.const 7 + i32.and + i32.or + else + i32.const 1 + end + i32.eqz + if + loop $do-loop|0 + local.get $2 + i64.load + local.get $1 + i64.load + i64.eq + if + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $0 + i32.const 4 + i32.sub + local.tee $0 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + block $__inlined_func$~lib/util/string/compareImpl$215 + loop $while-continue|1 + local.get $0 + local.tee $3 + i32.const 1 + i32.sub + local.set $0 + local.get $3 + if + local.get $2 + i32.load16_u + local.tee $5 + local.get $1 + i32.load16_u + local.tee $4 + i32.sub + local.set $3 + local.get $4 + local.get $5 + i32.ne + br_if $__inlined_func$~lib/util/string/compareImpl$215 + local.get $2 + i32.const 2 + i32.add + local.set $2 + local.get $1 + i32.const 2 + i32.add + local.set $1 + br $while-continue|1 + end + end + i32.const 0 + local.set $3 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.eqz + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1280 + call $~lib/rt/itcms/__visit + i32.const 2128 + call $~lib/rt/itcms/__visit + i32.const 2320 + call $~lib/rt/itcms/__visit + i32.const 3024 + call $~lib/rt/itcms/__visit + i32.const 1088 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $closure-stress/testMapWithClosure~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $~lib/__closure_env + i32.load offset=4 + i32.mul + ) + (func $closure-stress/simpleClosureArray~anonymous|2 (result i32) + global.get $~lib/__closure_env + i32.load offset=12 + ) + (func $closure-stress/makeMultiplier (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 36 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/makeCounter (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 10 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $closure-stress/makeAdderPair (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 73 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 0 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 74 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $0 + i32.const 1 + local.get $2 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $closure-stress/makeAdder (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 35 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/emptyClosure~anonymous|0 (result i32) + i32.const 42 + ) + (func $closure-stress/closureInConditional (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + i32.const 10 + i32.store offset=8 + local.get $2 + i32.const 20 + i32.store offset=12 + local.get $0 + if + global.get $~lib/memory/__stack_pointer + local.set $2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 23 + i32.store + else + global.get $~lib/memory/__stack_pointer + local.set $2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 24 + i32.store + end + local.get $0 + local.get $1 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureString~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + ) + (func $closure-stress/captureMultipleI32 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $4 + local.get $0 + i32.store offset=8 + local.get $4 + local.get $1 + i32.store offset=12 + local.get $4 + local.get $2 + i32.store offset=16 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 6 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureI64Param (param $0 i64) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i64.store offset=12 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 2 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureF64Param (param $0 f64) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + f64.store offset=12 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 4 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureF32Param (param $0 f32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + f32.store offset=8 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 3 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + ) + (func $closure-stress/captureBool (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + local.get $0 + i32.store8 offset=8 + i32.const 8 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 5 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure-stress/captureArray~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 0 + call $~lib/array/Array#__get + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.const 1 + call $~lib/array/Array#__get + local.get $2 + i32.add + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/array/Array#__get + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:closure-stress + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 37348 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 37348 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 37348 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1424 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $"~lib/map/Map#set" (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $7 + call $"~lib/map/Map#find" + local.tee $3 + if + local.get $3 + local.get $2 + i32.store offset=4 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 3 + i32.mul + i32.const 4 + i32.div_s + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.const 1 + i32.or + end + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + i32.shl + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 3 + i32.shl + i32.const 3 + i32.div_s + local.tee $6 + i32.const 12 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=8 + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $10 + local.get $0 + i32.load offset=16 + i32.const 12 + i32.mul + i32.add + local.set $5 + local.get $4 + local.set $3 + loop $while-continue|0 + local.get $5 + local.get $10 + i32.ne + if + local.get $10 + i32.load offset=8 + i32.const 1 + i32.and + i32.eqz + if + local.get $3 + local.get $10 + i32.load + local.tee $11 + i32.store + local.get $3 + local.get $10 + i32.load offset=4 + i32.store offset=4 + local.get $3 + local.get $9 + local.get $8 + local.get $11 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $11 + local.get $11 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $11 + local.get $11 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $11 + local.get $11 + i32.const 16 + i32.shr_u + i32.xor + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $11 + i32.load + i32.store offset=8 + local.get $11 + local.get $3 + i32.store + local.get $3 + i32.const 12 + i32.add + local.set $3 + end + local.get $10 + i32.const 12 + i32.add + local.set $10 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=12 + local.get $0 + local.get $9 + i32.store + local.get $0 + local.get $9 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $8 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $0 + local.get $4 + i32.store offset=8 + local.get $0 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $0 + local.get $0 + i32.load offset=20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + local.tee $4 + i32.const 1 + i32.add + i32.store offset=16 + local.get $3 + local.get $4 + i32.const 12 + i32.mul + i32.add + local.tee $3 + local.get $1 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=20 + i32.const 1 + i32.add + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $3 + local.get $1 + local.get $7 + local.get $0 + i32.load offset=4 + i32.and + i32.const 2 + i32.shl + i32.add + local.tee $0 + i32.load + i32.store offset=8 + local.get $0 + local.get $3 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $start:closure-stress + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 180 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 180 + memory.fill + memory.size + i32.const 16 + i32.shl + i32.const 37348 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/pinSpace + i32.const 1236 + i32.const 1232 + i32.store + i32.const 1240 + i32.const 1232 + i32.store + i32.const 1232 + global.set $~lib/rt/itcms/toSpace + i32.const 1380 + i32.const 1376 + i32.store + i32.const 1384 + i32.const 1376 + i32.store + i32.const 1376 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 42 + call $closure-stress/captureI32Param + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 13 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const -1 + call $closure-stress/captureI32Param + local.tee $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2147483647 + call $closure-stress/captureI32Param + local.tee $0 + i32.store offset=8 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2147483647 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 42 + call $closure-stress/captureI64Param + local.tee $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $8) + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1488 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 9223372036854775807 + call $closure-stress/captureI64Param + local.tee $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $8) + i64.const 9223372036854775807 + i64.ne + if + i32.const 0 + i32.const 1488 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f32.const 3.140000104904175 + call $closure-stress/captureF32Param + local.tee $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $9) + f32.const 3.140000104904175 + f32.ne + if + i32.const 0 + i32.const 1488 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f32.const 0 + call $closure-stress/captureF32Param + local.tee $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $9) + f32.const 0 + f32.ne + if + i32.const 0 + i32.const 1488 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f64.const 3.141592653589793 + call $closure-stress/captureF64Param + local.tee $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $5) + f64.const 3.141592653589793 + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + f64.const inf + call $closure-stress/captureF64Param + local.tee $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $5) + f64.const inf + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-stress/captureBool + local.tee $0 + i32.store offset=36 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-stress/captureBool + local.tee $0 + i32.store offset=40 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + if + i32.const 0 + i32.const 1488 + i32.const 43 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + i32.const 2 + i32.const 3 + call $closure-stress/captureMultipleI32 + local.tee $0 + i32.store offset=44 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + i32.const 200 + i32.const 300 + call $closure-stress/captureMultipleI32 + local.tee $0 + i32.store offset=48 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 600 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 32 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i64.const 2 + i64.store offset=12 + local.get $3 + f32.const 3 + f32.store offset=20 + local.get $3 + f64.const 4 + f64.store offset=28 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 7 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=52 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $5) + f64.const 10 + f64.ne + if + i32.const 0 + i32.const 1488 + i32.const 60 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 36 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i32.const 2 + i32.store offset=12 + local.get $3 + i32.const 3 + i32.store offset=16 + local.get $3 + i32.const 4 + i32.store offset=20 + local.get $3 + i32.const 5 + i32.store offset=24 + local.get $3 + i32.const 6 + i32.store offset=28 + local.get $3 + i32.const 7 + i32.store offset=32 + local.get $3 + i32.const 8 + i32.store offset=36 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 8 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=56 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 36 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 20 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 0 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.store offset=8 + local.get $3 + i32.const 2 + i32.store offset=12 + local.get $3 + i32.const 100 + i32.store offset=16 + local.get $3 + i32.const 200 + i32.store offset=20 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 9 + i32.store + local.get $4 + local.get $3 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=60 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 303 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter1 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=64 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=68 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=72 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure-stress/makeCounter + global.set $closure-stress/counter2 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter2 + local.tee $0 + i32.store offset=76 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 96 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/counter1 + local.tee $0 + i32.store offset=80 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 97 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 11 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 12 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 20 + local.get $4 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 108 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 13 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 14 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 15 + i32.store + local.get $6 + local.get $3 + i32.store offset=4 + local.get $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=28 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=36 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 127 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 28 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 16 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 17 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 138 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 142 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 18 + i32.store + local.get $3 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + global.set $closure-stress/addTo10 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addTo10 + local.tee $0 + i32.store offset=84 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 153 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addTo10 + local.tee $0 + i32.store offset=88 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 20 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 154 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 19 + i32.store + local.get $3 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $3 + global.set $closure-stress/greaterThan5 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/greaterThan5 + local.tee $0 + i32.store offset=92 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + local.get $0 + i32.load + call_indirect (type $1) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/greaterThan5 + local.tee $0 + i32.store offset=96 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + if + i32.const 0 + i32.const 1488 + i32.const 162 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $4 + i32.store + local.get $0 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 20 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $4 + i32.const 0 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 20 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 21 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $4 + i32.const 1 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 30 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 22 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $4 + i32.const 2 + local.get $0 + call $~lib/array/Array<%28%29=>i32>#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 183 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure-stress/closureInConditional + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $closure-stress/closureInConditional + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 42 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 25 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $3 + i32.store + local.get $3 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 26 + i32.store + local.get $4 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 233 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 32 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $3 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + call $~lib/array/Array#constructor + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $4 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $4 + i32.store + local.get $4 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $0 + i32.store + local.get $0 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 27 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 28 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 250 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 252 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=24 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 257 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $3 + i32.const 4 + i32.add + local.set $4 + local.get $3 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 29 + i32.store + local.get $3 + local.get $4 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 30 + i32.store + local.get $5 + local.get $4 + i32.store offset=4 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 280 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 3 + call $~lib/array/Array#constructor + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 31 + i32.store + local.get $5 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + call $~lib/array/Array#get:length + call $~lib/array/Array#constructor + local.tee $0 + i32.store offset=4 + loop $for-loop|0 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + local.get $2 + call $~lib/array/Array#__get + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + local.get $2 + local.get $6 + local.get $5 + i32.load + call_indirect (type $1) + call $~lib/array/Array#__set + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/array/Array#__get + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1 + call $~lib/array/Array#__get + local.get $2 + i32.add + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2 + call $~lib/array/Array#__get + local.get $2 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 60 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 306 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $2 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 5 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $~lib/array/Array#constructor + local.tee $0 + i32.store + loop $for-loop|1 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $1 + call $~lib/array/Array#__set + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 32 + i32.store + local.get $3 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + i32.const 0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $~lib/array/Array#constructor + local.tee $4 + i32.store + loop $for-loop|02 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/array/Array#get:length + local.get $2 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + if + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + local.get $2 + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $4 + i32.load offset=12 + local.tee $6 + i32.const 1 + i32.add + local.tee $7 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.load offset=4 + local.get $6 + i32.const 2 + i32.shl + i32.add + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|02 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $~lib/array/Array#get:length + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 330 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 20 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.set $3 + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + i32.const 100 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 5 + call $~lib/array/Array#constructor + local.tee $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 3 + i32.const 4 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 4 + i32.const 5 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=8 + i32.const 0 + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + loop $for-loop|04 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length + local.get $1 + i32.gt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $1 + call $~lib/array/Array#__get + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=8 + i32.const 2772 + i32.load + global.set $~lib/__closure_env + local.get $0 + local.get $5 + i32.const 2768 + i32.load + call_indirect (type $4) + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|04 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 34 + i32.store + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 115 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 5 + call $closure-stress/makeAdder + global.set $closure-stress/add5 + i32.const 10 + call $closure-stress/makeAdder + global.set $closure-stress/add10 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $0 + i32.store offset=100 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 8 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 369 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add10 + local.tee $0 + i32.store offset=104 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 370 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $0 + i32.store offset=108 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add10 + local.tee $1 + i32.store offset=116 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 0 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=112 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 371 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure-stress/makeMultiplier + global.set $closure-stress/double + i32.const 3 + call $closure-stress/makeMultiplier + global.set $closure-stress/triple + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $0 + i32.store offset=120 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 379 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/triple + local.tee $0 + i32.store offset=124 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 380 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $0 + i32.store offset=128 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/triple + local.tee $1 + i32.store offset=136 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 4 + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=132 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 381 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/double + local.tee $0 + i32.store offset=140 + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/add5 + local.tee $1 + i32.store offset=144 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + local.get $2 + local.get $1 + i32.store offset=12 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 37 + i32.store + local.get $0 + local.get $2 + i32.const 4 + i32.add + i32.store offset=4 + local.get $0 + global.set $closure-stress/addThenDouble + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addThenDouble + local.tee $0 + i32.store offset=148 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 16 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 388 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 0 + global.set $closure-stress/callCount + global.get $~lib/memory/__stack_pointer + i32.const 2928 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.set $2 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 2928 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 17 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 16 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.store + local.get $3 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + i32.const 48 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.store offset=8 + local.get $3 + local.get $4 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + i32.store offset=8 + i32.const 8 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 39 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 413 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 414 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 415 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 416 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 3 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 417 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 418 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 5 + local.get $1 + i32.load + call_indirect (type $1) + i32.const 25 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 419 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 420 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $closure-stress/callCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 424 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3168 + i32.store offset=152 + i32.const 3172 + i32.load + global.set $~lib/__closure_env + i32.const 3168 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 434 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store offset=8 + local.get $0 + i32.const 20 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 41 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 443 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=4 + i32.const 3236 + i32.load + global.set $~lib/__closure_env + i32.const 3232 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 451 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=156 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 467 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 1 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=160 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 468 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2 + call $closure-stress/multipleClosureReturns + local.tee $0 + i32.store offset=164 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 469 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3360 + global.set $closure-stress/fact + global.get $~lib/memory/__stack_pointer + i32.const 3360 + i32.store offset=168 + i32.const 3364 + i32.load + global.set $~lib/__closure_env + i32.const 5 + i32.const 3360 + i32.load + call_indirect (type $1) + i32.const 120 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 483 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/fact + local.tee $0 + i32.store offset=172 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 6 + local.get $0 + i32.load + call_indirect (type $1) + i32.const 720 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 484 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 10 + i32.store8 offset=8 + local.get $0 + i32.const 20 + i32.store8 offset=9 + local.get $0 + i32.const 30 + i32.store16 offset=10 + local.get $0 + i32.const 40 + i32.store16 offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 47 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 496 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 48 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 48 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 49 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 50 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 51 + i32.store + local.get $5 + local.get $1 + i32.store offset=4 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 52 + i32.store + local.get $6 + local.get $1 + i32.store offset=4 + local.get $6 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 53 + i32.store + local.get $7 + local.get $1 + i32.store offset=4 + local.get $7 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=36 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=40 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=44 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 517 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 52 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + local.get $0 + i32.const 2 + i32.store offset=12 + local.get $0 + i32.const 3 + i32.store offset=16 + local.get $0 + i32.const 4 + i32.store offset=20 + local.get $0 + i32.const 5 + i32.store offset=24 + local.get $0 + i32.const 6 + i32.store offset=28 + local.get $0 + i32.const 7 + i32.store offset=32 + local.get $0 + i32.const 8 + i32.store offset=36 + local.get $0 + i32.const 9 + i32.store offset=40 + local.get $0 + i32.const 10 + i32.store offset=44 + local.get $0 + i32.const 11 + i32.store offset=48 + local.get $0 + i32.const 12 + i32.store offset=52 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 54 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 78 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 529 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 55 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 539 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $~lib/array/Array<%28%29=>i32>#constructor + local.tee $2 + i32.store + i32.const 0 + local.set $0 + loop $for-loop|05 + local.get $0 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 10 + i32.mul + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 56 + i32.store + local.get $3 + local.get $1 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $2 + local.get $0 + local.get $3 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|05 + end + end + i32.const 0 + local.set $0 + i32.const 0 + local.set $1 + loop $for-loop|10 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + local.set $0 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|10 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const 450 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 564 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 44 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 57 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 58 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 59 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=20 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 60 + i32.store + local.get $5 + local.get $1 + i32.store offset=4 + local.get $5 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=28 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=32 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=36 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=40 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 123 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 585 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3840 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 61 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=140 + local.get $0 + i32.const 3840 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 597 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3904 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 19 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 62 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 18 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 63 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 4032 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 4064 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 4096 + local.get $2 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=140 + local.get $0 + i32.const 4128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 611 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 65 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 634 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 0 + local.set $1 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 66 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + loop $for-loop|01 + local.get $1 + i32.const 10 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + local.get $2 + i32.load + call_indirect (type $3) + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 45 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 654 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=8 + local.get $0 + i32.const 4 + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 67 + i32.store + local.get $1 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $1 + global.set $closure-stress/addResult + global.get $~lib/memory/__stack_pointer + global.get $closure-stress/addResult + local.tee $0 + i32.store offset=176 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 7 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 662 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.set $1 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 68 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 69 + i32.store + local.get $4 + local.get $1 + i32.store offset=4 + local.get $4 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 675 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 677 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 678 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 682 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 72 + i32.store + local.get $2 + local.get $0 + i32.const 4 + i32.add + i32.store offset=4 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 111 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 707 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 10 + call $closure-stress/makeAdderPair + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 730 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 733 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 100 + call $closure-stress/makeAdderPair + local.tee $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $2 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=44 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=48 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 101 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 741 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=52 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 742 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=56 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=60 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + local.get $0 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const -64 + i32.sub + global.set $~lib/memory/__stack_pointer + i32.const 113 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 746 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 180 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/testSharedMutation~anonymous|1 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.sub + i32.store offset=4 + ) + (func $closure-stress/testReduceWithClosure~anonymous|0 (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) + (func $closure-stress/testRangeWithClosure~anonymous|0 (param $0 i32) + (local $1 i32) + global.get $~lib/__closure_env + local.tee $1 + local.get $1 + i32.load offset=4 + local.get $0 + i32.add + i32.store offset=4 + ) + (func $closure-stress/testOuterScopeMutation~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + i32.store offset=4 + ) + (func $closure-stress/testNestedClosureFunctions~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.tee $2 + local.get $2 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 64 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + drop + local.get $2 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testFilterWithClosure~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $~lib/__closure_env + i32.load offset=4 + i32.ge_s + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/__closure_env + local.tee $1 + i32.load + local.set $0 + local.get $1 + i32.load offset=4 + local.get $0 + i32.load + i32.load offset=4 + local.get $0 + i32.load offset=4 + i32.add + i32.add + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 100 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 70 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testDeeplyNestedClosures~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/__closure_env + local.set $0 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $2 + local.get $0 + i32.store + local.get $1 + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 71 + i32.store + local.get $1 + local.get $2 + i32.store offset=4 + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/testBidirectionalMutation~anonymous|0 (param $0 i32) + global.get $~lib/__closure_env + local.get $0 + i32.store offset=4 + ) + (func $closure-stress/simpleIIFE~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + i32.const 9 + i32.add + ) + (func $closure-stress/mutateStringRef~anonymous|0 (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $4 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + local.tee $1 + i32.store + block $__inlined_func$~lib/string/String#concat$374 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.tee $5 + local.get $3 + i32.add + local.tee $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3936 + local.set $0 + br $__inlined_func$~lib/string/String#concat$374 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $2 + local.get $3 + memory.copy + local.get $0 + local.get $3 + i32.add + local.get $1 + local.get $5 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/mutateCapturedArray~anonymous|0 + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + i32.const 0 + local.get $2 + i32.const 0 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $2 + i32.store offset=4 + local.get $1 + i32.const 1 + local.get $2 + i32.const 1 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.tee $0 + i32.store offset=4 + local.get $1 + i32.const 2 + local.get $0 + i32.const 2 + call $~lib/array/Array#__get + i32.const 1 + i32.shl + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/memoize~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + local.get $0 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + local.get $3 + i32.const 15 + i32.shr_u + local.tee $1 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $4 + local.get $4 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $4 + local.get $4 + i32.const 16 + i32.shr_u + i32.xor + call $"~lib/map/Map#find" + i32.const 0 + i32.ne + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $1 + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $0 + local.get $0 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $0 + local.get $0 + i32.const 16 + i32.shr_u + i32.xor + call $"~lib/map/Map#find" + local.tee $0 + i32.eqz + if + i32.const 3024 + i32.const 3088 + i32.const 106 + i32.const 17 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + local.get $1 + i32.load + call_indirect (type $1) + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=4 + local.tee $2 + i32.store + local.get $2 + local.get $0 + local.get $1 + call $"~lib/map/Map#set" + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|4 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 5 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|3 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|2 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyClosuresSameEnv~anonymous|1 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 2 + i32.add + i32.store offset=4 + ) + (func $closure-stress/manyCaptures~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=48 + local.get $0 + i32.load offset=44 + local.get $0 + i32.load offset=40 + local.get $0 + i32.load offset=36 + local.get $0 + i32.load offset=32 + local.get $0 + i32.load offset=28 + local.get $0 + i32.load offset=24 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + ) + (func $closure-stress/makeGreaterThan~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $~lib/__closure_env + i32.load offset=4 + i32.gt_s + ) + (func $closure-stress/makeFactorial~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + i32.const 1 + local.set $2 + i32.const 2 + local.set $1 + loop $for-loop|0 + local.get $0 + local.get $1 + i32.ge_s + if + local.get $1 + local.get $2 + i32.mul + local.set $2 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + local.get $2 + ) + (func $closure-stress/makeAdder~anonymous|0 (param $0 i32) (result i32) + local.get $0 + global.get $~lib/__closure_env + i32.load offset=4 + i32.add + ) + (func $closure-stress/interleavedClosures~anonymous|3 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 100 + i32.add + i32.store offset=4 + ) + (func $closure-stress/interleavedClosures~anonymous|2 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 10 + i32.add + i32.store offset=4 + ) + (func $closure-stress/expensiveComputation (param $0 i32) (result i32) + global.get $closure-stress/callCount + i32.const 1 + i32.add + global.set $closure-stress/callCount + local.get $0 + local.get $0 + i32.mul + ) + (func $closure-stress/curriedAdd~anonymous|0 (param $0 i32) (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + local.get $0 + i32.add + ) + (func $closure-stress/compose~anonymous|0 (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $2 + i32.load offset=4 + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=8 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + local.get $2 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureSmallTypes~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load16_u offset=8 + local.get $0 + i32.load16_s offset=6 + local.get $0 + i32.load8_s offset=4 + local.get $0 + i32.load8_u offset=5 + i32.add + i32.add + i32.add + ) + (func $closure-stress/captureParamsAndLocals~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + ) + (func $closure-stress/captureMultipleI32~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + ) + (func $closure-stress/captureMixedTypes~anonymous|0 (result f64) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + f64.convert_i32_s + local.get $0 + i64.load offset=8 + f64.convert_i64_s + f64.add + local.get $0 + f32.load offset=16 + f64.promote_f32 + f64.add + local.get $0 + f64.load offset=24 + f64.add + ) + (func $closure-stress/captureI64Param~anonymous|0 (result i64) + global.get $~lib/__closure_env + i64.load offset=8 + ) + (func $closure-stress/captureF64Param~anonymous|0 (result f64) + global.get $~lib/__closure_env + f64.load offset=8 + ) + (func $closure-stress/captureF32Param~anonymous|0 (result f32) + global.get $~lib/__closure_env + f32.load offset=4 + ) + (func $closure-stress/captureClassInstance~anonymous|1 (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + i32.load offset=4 + local.tee $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureClassInstance~anonymous|0 + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4580 + i32.lt_s + if + i32.const 37376 + i32.const 37424 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/__closure_env + local.tee $1 + i32.load offset=4 + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=4 + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure-stress/captureBool~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load8_u offset=4 + ) + (func $closure-stress/capture8Params~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=32 + local.get $0 + i32.load offset=28 + local.get $0 + i32.load offset=24 + local.get $0 + i32.load offset=20 + local.get $0 + i32.load offset=16 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + i32.add + ) +) diff --git a/tests/compiler/closure-stress.ts b/tests/compiler/closure-stress.ts new file mode 100644 index 0000000000..a69fdcfcc4 --- /dev/null +++ b/tests/compiler/closure-stress.ts @@ -0,0 +1,751 @@ +// ============================================================================= +// CLOSURE STRESS TEST +// ============================================================================= + +// ============================================================================= +// SECTION 1: Basic Capture Patterns +// ============================================================================= + +// Test 1.1: Capture single i32 parameter +function captureI32Param(x: i32): () => i32 { + return (): i32 => x; +} +assert(captureI32Param(42)() == 42); +assert(captureI32Param(-1)() == -1); +assert(captureI32Param(0x7FFFFFFF)() == 0x7FFFFFFF); + +// Test 1.2: Capture single i64 parameter +function captureI64Param(x: i64): () => i64 { + return (): i64 => x; +} +assert(captureI64Param(42)() == 42); +assert(captureI64Param(0x7FFFFFFFFFFFFFFF)() == 0x7FFFFFFFFFFFFFFF); + +// Test 1.3: Capture single f32 parameter +function captureF32Param(x: f32): () => f32 { + return (): f32 => x; +} +assert(captureF32Param(3.14)() == 3.14); +assert(captureF32Param(0.0)() == 0.0); + +// Test 1.4: Capture single f64 parameter +function captureF64Param(x: f64): () => f64 { + return (): f64 => x; +} +assert(captureF64Param(3.141592653589793)() == 3.141592653589793); +assert(captureF64Param(Infinity)() == Infinity); + +// Test 1.5: Capture boolean +function captureBool(x: bool): () => bool { + return (): bool => x; +} +assert(captureBool(true)() == true); +assert(captureBool(false)() == false); + +// ============================================================================= +// SECTION 2: Multiple Captures with Different Types +// ============================================================================= + +// Test 2.1: Capture multiple i32s +function captureMultipleI32(a: i32, b: i32, c: i32): () => i32 { + return (): i32 => a + b + c; +} +assert(captureMultipleI32(1, 2, 3)() == 6); +assert(captureMultipleI32(100, 200, 300)() == 600); + +// Test 2.2: Capture mixed types (i32, i64, f32, f64) +function captureMixedTypes(a: i32, b: i64, c: f32, d: f64): () => f64 { + return (): f64 => a + b + c + d; +} +assert(captureMixedTypes(1, 2, 3.0, 4.0)() == 10.0); + +// Test 2.3: Capture 8 parameters (stress test alignment) +function capture8Params( + a: i32, b: i32, c: i32, d: i32, + e: i32, f: i32, g: i32, h: i32 +): () => i32 { + return (): i32 => a + b + c + d + e + f + g + h; +} +assert(capture8Params(1, 2, 3, 4, 5, 6, 7, 8)() == 36); + +// Test 2.4: Capture parameters and locals mixed +function captureParamsAndLocals(a: i32, b: i32): () => i32 { + let c: i32 = 100; + let d: i32 = 200; + return (): i32 => a + b + c + d; +} +assert(captureParamsAndLocals(1, 2)() == 303); + +// ============================================================================= +// SECTION 3: Mutable Captures (Reference Semantics) +// ============================================================================= + +// Test 3.1: Simple counter +function makeCounter(): () => i32 { + let count: i32 = 0; + return (): i32 => { + count = count + 1; + return count; + }; +} +let counter1 = makeCounter(); +assert(counter1() == 1); +assert(counter1() == 2); +assert(counter1() == 3); +let counter2 = makeCounter(); // New counter should start at 0 +assert(counter2() == 1); +assert(counter1() == 4); // Original counter continues + +// Test 3.2: Bidirectional mutation +function testBidirectionalMutation(): i32 { + let value: i32 = 0; + let setter = (x: i32): void => { value = x; }; + let getter = (): i32 => value; + + setter(10); + assert(getter() == 10); + setter(20); + assert(getter() == 20); + + return getter(); +} +assert(testBidirectionalMutation() == 20); + +// Test 3.3: Multiple closures mutating same variable +function testSharedMutation(): i32 { + let value: i32 = 0; + let inc = (): void => { value = value + 1; }; + let dec = (): void => { value = value - 1; }; + let get = (): i32 => value; + + inc(); inc(); inc(); // value = 3 + dec(); // value = 2 + inc(); inc(); // value = 4 + + return get(); +} +assert(testSharedMutation() == 4); + +// Test 3.4: Mutation affects outer scope +function testOuterScopeMutation(): i32 { + let value: i32 = 5; + let double = (): void => { value = value * 2; }; + let get = (): i32 => value; + + double(); // value = 10 + assert(get() == 10); + double(); // value = 20 + assert(get() == 20); + + return get(); +} +assert(testOuterScopeMutation() == 20); + +// ============================================================================= +// SECTION 4: Simple Currying (single level capture only) +// ============================================================================= + +// Test 4.1: Simple currying pattern +function curriedAdd(a: i32): (b: i32) => i32 { + return (b: i32): i32 => a + b; +} +let addTo10 = curriedAdd(10); +assert(addTo10(5) == 15); +assert(addTo10(20) == 30); + +// Test 4.2: Another currying example +function makeGreaterThan(threshold: i32): (x: i32) => bool { + return (x: i32): bool => x > threshold; +} +let greaterThan5 = makeGreaterThan(5); +assert(greaterThan5(10) == true); +assert(greaterThan5(3) == false); + +// ============================================================================= +// SECTION 5: Closures with Complex Control Flow +// ============================================================================= + +// Test 5.1: Simple array of closures +function simpleClosureArray(): i32 { + let fns = new Array<() => i32>(3); + + let v0: i32 = 10; + fns[0] = (): i32 => v0; + + let v1: i32 = 20; + fns[1] = (): i32 => v1; + + let v2: i32 = 30; + fns[2] = (): i32 => v2; + + return fns[0]() + fns[1]() + fns[2](); +} +assert(simpleClosureArray() == 60); + +// Test 5.2: Closure in conditional +function closureInConditional(useFirst: bool): i32 { + let a: i32 = 10; + let b: i32 = 20; + + let getter: () => i32; + if (useFirst) { + getter = (): i32 => a; + } else { + getter = (): i32 => b; + } + + return getter(); +} +assert(closureInConditional(true) == 10); +assert(closureInConditional(false) == 20); + +// Test 5.3: Closure escaping try block (simulated) +function closureEscapingBlock(): i32 { + let value: i32 = 0; + let captured: () => i32; + + { + let inner: i32 = 42; + captured = (): i32 => inner; + value = captured(); + } + + // Inner scope ended but closure still works + return captured(); +} +assert(closureEscapingBlock() == 42); + +// ============================================================================= +// SECTION 6: Closures with Objects and Arrays +// ============================================================================= + +// Test 6.1: Capture array reference +function captureArray(): i32 { + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let sum = (): i32 => arr[0] + arr[1] + arr[2]; + + return sum(); +} +assert(captureArray() == 6); + +// Test 6.2: Mutate captured array +function mutateCapturedArray(): i32 { + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let doubleAll = (): void => { + arr[0] = arr[0] * 2; + arr[1] = arr[1] * 2; + arr[2] = arr[2] * 2; + }; + + let sum = (): i32 => arr[0] + arr[1] + arr[2]; + + assert(sum() == 6); + doubleAll(); + assert(sum() == 12); + doubleAll(); + + return sum(); +} +assert(mutateCapturedArray() == 24); + +// Test 6.3: Capture class instance +class Counter { + value: i32 = 0; + + increment(): void { + this.value++; + } +} + +function captureClassInstance(): i32 { + let c = new Counter(); + + let inc = (): void => { c.value = c.value + 1; }; + let get = (): i32 => c.value; + + inc(); + inc(); + inc(); + + return get(); +} +assert(captureClassInstance() == 3); + +// ============================================================================= +// SECTION 7: Higher-Order Functions with Closures +// ============================================================================= + +// Test 7.1: Map-like operation +function mapArray(arr: Array, fn: (x: i32) => i32): Array { + let result = new Array(arr.length); + for (let i: i32 = 0; i < arr.length; i++) { + result[i] = fn(arr[i]); + } + return result; +} + +function testMapWithClosure(): i32 { + let multiplier: i32 = 10; + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let result = mapArray(arr, (x: i32): i32 => x * multiplier); + + return result[0] + result[1] + result[2]; // 10 + 20 + 30 +} +assert(testMapWithClosure() == 60); + +// Test 7.2: Filter-like operation +function filterArray(arr: Array, pred: (x: i32) => bool): Array { + let result = new Array(0); + for (let i: i32 = 0; i < arr.length; i++) { + if (pred(arr[i])) { + result.push(arr[i]); + } + } + return result; +} + +function testFilterWithClosure(): i32 { + let threshold: i32 = 5; + let arr = new Array(10); + for (let i: i32 = 0; i < 10; i++) { + arr[i] = i; + } + + let result = filterArray(arr, (x: i32): bool => x >= threshold); + + return result.length; // 5, 6, 7, 8, 9 = 5 elements +} +assert(testFilterWithClosure() == 5); + +// Test 7.3: Reduce-like operation +function reduceArray(arr: Array, fn: (acc: i32, x: i32) => i32, initial: i32): i32 { + let acc = initial; + for (let i: i32 = 0; i < arr.length; i++) { + acc = fn(acc, arr[i]); + } + return acc; +} + +function testReduceWithClosure(): i32 { + let bonus: i32 = 100; + let arr = new Array(5); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + arr[3] = 4; + arr[4] = 5; + + // Sum all elements and add bonus at the end + let result = reduceArray(arr, (acc: i32, x: i32): i32 => acc + x, 0); + + let addBonus = (): i32 => result + bonus; + + return addBonus(); // 15 + 100 +} +assert(testReduceWithClosure() == 115); + +// ============================================================================= +// SECTION 8: Closure Factory Patterns +// ============================================================================= + +// Test 8.1: Adder factory +function makeAdder(amount: i32): (x: i32) => i32 { + return (x: i32): i32 => x + amount; +} +let add5 = makeAdder(5); +let add10 = makeAdder(10); +assert(add5(3) == 8); +assert(add10(3) == 13); +assert(add5(add10(0)) == 15); + +// Test 8.2: Multiplier factory +function makeMultiplier(factor: i32): (x: i32) => i32 { + return (x: i32): i32 => x * factor; +} +let double = makeMultiplier(2); +let triple = makeMultiplier(3); +assert(double(5) == 10); +assert(triple(5) == 15); +assert(double(triple(4)) == 24); + +// Test 8.3: Compose functions +function compose(f: (x: i32) => i32, g: (x: i32) => i32): (x: i32) => i32 { + return (x: i32): i32 => f(g(x)); +} +let addThenDouble = compose(double, add5); +assert(addThenDouble(3) == 16); // (3 + 5) * 2 = 16 + +// Test 8.4: Memoization pattern +function memoize(fn: (x: i32) => i32): (x: i32) => i32 { + let cache = new Map(); + return (x: i32): i32 => { + if (cache.has(x)) { + return cache.get(x); + } + let result = fn(x); + cache.set(x, result); + return result; + }; +} + +let callCount: i32 = 0; +function expensiveComputation(x: i32): i32 { + callCount++; + return x * x; +} + +function testMemoization(): i32 { + callCount = 0; + let memoized = memoize(expensiveComputation); + + assert(memoized(5) == 25); + assert(callCount == 1); + assert(memoized(5) == 25); // Should use cache + assert(callCount == 1); + assert(memoized(3) == 9); + assert(callCount == 2); + assert(memoized(5) == 25); // Still cached + assert(callCount == 2); + + return callCount; +} +assert(testMemoization() == 2); + +// ============================================================================= +// SECTION 9: Edge Cases and Corner Cases +// ============================================================================= + +// Test 9.1: Empty closure (captures nothing) +function emptyClosure(): () => i32 { + return (): i32 => 42; +} +assert(emptyClosure()() == 42); + +// Test 9.2: Capture only, no parameters +function captureOnlyNoParams(): i32 { + let x: i32 = 10; + let y: i32 = 20; + let fn = (): i32 => x + y; + return fn(); +} +assert(captureOnlyNoParams() == 30); + +// Test 9.3: Closure that ignores captured value +function ignoreCapture(): i32 { + let unused: i32 = 999; + let fn = (): i32 => 42; + return fn(); +} +assert(ignoreCapture() == 42); + +// Test 9.4: Multiple returns of same closure type +function multipleClosureReturns(which: i32): () => i32 { + let a: i32 = 10; + let b: i32 = 20; + let c: i32 = 30; + + if (which == 0) { + return (): i32 => a; + } else if (which == 1) { + return (): i32 => b; + } else { + return (): i32 => c; + } +} +assert(multipleClosureReturns(0)() == 10); +assert(multipleClosureReturns(1)() == 20); +assert(multipleClosureReturns(2)() == 30); + +// Test 9.5: Recursive closure pattern (using wrapper) +function makeFactorial(): (n: i32) => i32 { + // Use a simple iterative approach since recursive closures are complex + return (n: i32): i32 => { + let result: i32 = 1; + for (let i: i32 = 2; i <= n; i++) { + result = result * i; + } + return result; + }; +} +let fact = makeFactorial(); +assert(fact(5) == 120); +assert(fact(6) == 720); + +// Test 9.6: Closure with i8/u8/i16/u16 captures +function captureSmallTypes(): i32 { + let a: i8 = 10; + let b: u8 = 20; + let c: i16 = 30; + let d: u16 = 40; + + let fn = (): i32 => a + b + c + d; + return fn(); +} +assert(captureSmallTypes() == 100); + +// ============================================================================= +// SECTION 10: Stress Tests +// ============================================================================= + +// Test 10.1: Many closures sharing same environment +function manyClosuresSameEnv(): i32 { + let value: i32 = 0; + + let inc1 = (): void => { value += 1; }; + let inc2 = (): void => { value += 2; }; + let inc3 = (): void => { value += 3; }; + let inc4 = (): void => { value += 4; }; + let inc5 = (): void => { value += 5; }; + let get = (): i32 => value; + + inc1(); inc2(); inc3(); inc4(); inc5(); + + return get(); // 1 + 2 + 3 + 4 + 5 = 15 +} +assert(manyClosuresSameEnv() == 15); + +// Test 10.2: Large number of captures +function manyCaptures(): i32 { + let a: i32 = 1, b: i32 = 2, c: i32 = 3, d: i32 = 4; + let e: i32 = 5, f: i32 = 6, g: i32 = 7, h: i32 = 8; + let i: i32 = 9, j: i32 = 10, k: i32 = 11, l: i32 = 12; + + let fn = (): i32 => a + b + c + d + e + f + g + h + i + j + k + l; + + return fn(); // 78 +} +assert(manyCaptures() == 78); + +// Test 10.3: Simple IIFE (Immediately Invoked Function Expression) +function simpleIIFE(): i32 { + let v1: i32 = 1; + let result = ((): i32 => { + return v1 + 9; + })(); + return result; +} +assert(simpleIIFE() == 10); + +// Test 10.4: Closure array manipulation +// Note: Loop closures need a helper function to capture by value because +// ToilScript closures share their environment (reference semantics). +function captureLoopValue(val: i32): () => i32 { + return (): i32 => val; +} + +function closureArrayOps(): i32 { + let closures = new Array<() => i32>(10); + + for (let i: i32 = 0; i < 10; i++) { + let captured = i * 10; + // Use helper function to capture the current value of 'captured' + closures[i] = captureLoopValue(captured); + } + + let sum: i32 = 0; + for (let i: i32 = 0; i < 10; i++) { + sum += closures[i](); + } + + return sum; // 0 + 10 + 20 + ... + 90 = 450 +} +assert(closureArrayOps() == 450); + +// Test 10.5: Interleaved closure creation and execution +function interleavedClosures(): i32 { + let total: i32 = 0; + let get = (): i32 => total; + + let add1 = (): void => { total += 1; }; + add1(); + + let add10 = (): void => { total += 10; }; + add1(); + add10(); + + let add100 = (): void => { total += 100; }; + add1(); + add10(); + add100(); + + return get(); // 1 + 1 + 10 + 1 + 10 + 100 = 123 +} +assert(interleavedClosures() == 123); + +// ============================================================================= +// SECTION 11: Closure with String captures +// ============================================================================= + +// Test 11.1: Capture string +function captureString(): string { + let s: string = "Hello"; + let fn = (): string => s; + return fn(); +} +assert(captureString() == "Hello"); + +// Test 11.2: Mutate captured string reference +function mutateStringRef(): string { + let s: string = "A"; + let append = (suffix: string): void => { s = s + suffix; }; + let get = (): string => s; + + append("B"); + append("C"); + append("D"); + + return get(); +} +assert(mutateStringRef() == "ABCD"); + +// ============================================================================= +// SECTION 12: Tests from Issue #798 Discussion +// ============================================================================= + +// Test 12.1: Nested closures (outer -> inner -> innerInner) from @dcodeIO's example +// This tests the parent environment chain - innerInner captures x from grandparent scope +function testNestedClosureFunctions(): i32 { + let x: i32 = 0; + + let inner = (): i32 => { + x += 1; + let innerInner = (): i32 => { + x += 1; // Capture from grandparent scope! + return x; + }; + innerInner(); + return x; + }; + + return inner(); // x should be 2 (incremented twice) +} +assert(testNestedClosureFunctions() == 2); + +// Test 12.2: Range callback pattern from @MaxGraey's original example +// Tests passing closures to higher-order functions with captures +function range(a: i32, b: i32, fn: (n: i32) => void): void { + for (let i = a; i < b; i++) { + fn(i); + } +} + +function testRangeWithClosure(): i32 { + let sum: i32 = 0; + let n: i32 = 10; + + range(0, n, (i: i32): void => { + sum += i; // captures sum + }); + + return sum; // 0+1+2+3+4+5+6+7+8+9 = 45 +} +assert(testRangeWithClosure() == 45); + +// Test 12.3: Return closure pattern from @jtenner's question +// function add(a, b) { return () => a + b; } +function add(a: i32, b: i32): () => i32 { + return (): i32 => a + b; +} +let addResult = add(3, 4); +assert(addResult() == 7); + +// Test 12.4: Two closures different views of same variable from @jtenner's example +// let a = 1; let b = () => a; let c = () => a += 1; +function testTwoClosuresSameVar(): i32 { + let a: i32 = 1; + let b = (): i32 => a; + let c = (): i32 => { + a += 1; + return a; + }; + + let br = b(); // 1 + assert(br == 1); + let cr = c(); // 2 + assert(cr == 2); + assert(a == 2); + + return a; +} +assert(testTwoClosuresSameVar() == 2); + +// Test 12.5: Deeply nested closure chain +// Tests multiple levels of environment parent pointers +function testDeeplyNestedClosures(): i32 { + let level1: i32 = 1; + + let fn1 = (): i32 => { + let level2: i32 = 10; + + let fn2 = (): i32 => { + let level3: i32 = 100; + + let fn3 = (): i32 => { + return level1 + level2 + level3; // captures from 3 levels up! + }; + + return fn3(); + }; + + return fn2(); + }; + + return fn1(); // 1 + 10 + 100 = 111 +} +assert(testDeeplyNestedClosures() == 111); + +// Test 12.6: Closure escapes outer function and is called later +// Tests that environment stays alive after outer function returns +function makeAdderPair(initial: i32): (() => i32)[] { + let value = initial; + let arr = new Array<() => i32>(2); + + arr[0] = (): i32 => { + value += 1; + return value; + }; + + arr[1] = (): i32 => value; + + return arr; +} + +function testClosureEscapesFunction(): i32 { + let pair = makeAdderPair(10); + let increment = pair[0]; + let getValue = pair[1]; + + assert(getValue() == 10); + increment(); // 11 + increment(); // 12 + assert(getValue() == 12); + + // Create another independent pair + let pair2 = makeAdderPair(100); + let increment2 = pair2[0]; + let getValue2 = pair2[1]; + + increment2(); // 101 + assert(getValue2() == 101); + assert(getValue() == 12); // Original pair unchanged + + return getValue() + getValue2(); // 12 + 101 = 113 +} +assert(testClosureEscapesFunction() == 113); + +// ============================================================================= +// Final assertion to confirm all tests passed +// ============================================================================= +assert(true); // If we reach here, all tests passed! diff --git a/tests/compiler/closure.debug.wat b/tests/compiler/closure.debug.wat new file mode 100644 index 0000000000..c772bdfde1 --- /dev/null +++ b/tests/compiler/closure.debug.wat @@ -0,0 +1,5882 @@ +(module + (type $0 (func (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32))) + (type $3 (func)) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i64) (result i32))) + (type $9 (func (param i32 i32 i32) (result i32))) + (type $10 (func (param i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $closure/fn1 (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $closure/fn2 (mut i32) (i32.const 0)) + (global $closure/fn3 (mut i32) (i32.const 0)) + (global $closure/fn5 (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $closure/counter1 (mut i32) (i32.const 0)) + (global $closure/counter2 (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1584)) + (global $~lib/memory/__data_end i32 (i32.const 1648)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34416)) + (global $~lib/memory/__heap_base i32 (i32.const 34416)) + (memory $0 1) + (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $2 (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 208) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 236) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 300) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 352) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 444) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00c\00l\00o\00s\00u\00r\00e\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 492) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 524) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 556) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data $13 (i32.const 588) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 620) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data $15 (i32.const 652) "\1c\00\00\00\00\00\00\00\00\00\00\00\06\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 684) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 716) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data $18 (i32.const 748) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data $19 (i32.const 780) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data $20 (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data $21 (i32.const 844) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\r\00\00\00\00\00\00\00\00\00\00\00") + (data $22 (i32.const 876) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data $23 (i32.const 908) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\0f\00\00\00\00\00\00\00\00\00\00\00") + (data $24 (i32.const 940) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\10\00\00\00\00\00\00\00\00\00\00\00") + (data $25 (i32.const 972) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00") + (data $26 (i32.const 1004) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $27 (i32.const 1052) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $28 (i32.const 1100) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $29 (i32.const 1228) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\12\00\00\00\00\00\00\00\00\00\00\00") + (data $30 (i32.const 1260) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\13\00\00\00\00\00\00\00\00\00\00\00") + (data $31 (i32.const 1292) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $32 (i32.const 1324) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 1356) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $34 (i32.const 1388) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\15\00\00\00\00\00\00\00\00\00\00\00") + (data $35 (i32.const 1420) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\16\00\00\00\00\00\00\00\00\00\00\00") + (data $36 (i32.const 1452) "\1c\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\08\00\00\00\17\00\00\00\00\00\00\00\00\00\00\00") + (data $37 (i32.const 1484) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\18\00\00\00\00\00\00\00\00\00\00\00") + (data $38 (i32.const 1516) "\1c\00\00\00\00\00\00\00\00\00\00\00\r\00\00\00\08\00\00\00\19\00\00\00\00\00\00\00\00\00\00\00") + (data $39 (i32.const 1548) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\1a\00\00\00\00\00\00\00\00\00\00\00") + (data $40 (i32.const 1584) "\0f\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02A\00\00\02\t\00\00\00\00\00\00\00\00\00\00\02A\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 27 27 funcref) + (elem $0 (i32.const 1) $closure/testCaptureParam~anonymous|0 $closure/testCaptureVar~anonymous|0 $closure/testCaptureLet~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testClosureWrite~anonymous|1 $closure/testMultipleCaptures~anonymous|0 $closure/testSharedEnvironment~anonymous|0 $closure/testSharedEnvironment~anonymous|1 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInDoWhile~anonymous|0 $closure/testCaptureInFor~anonymous|0 $closure/testCaptureInSwitch~anonymous|0 $closure/testCaptureInSwitch~anonymous|1 $closure/testCaptureInSwitch~anonymous|2 $closure/testCaptureInArrayLiteral~anonymous|0 $closure/testCaptureInArrayLiteral~anonymous|1 $closure/testCaptureInArrayLiteral~anonymous|2 $closure/testNestedClosureCapture~anonymous|0~anonymous|0 $closure/testNestedClosureCapture~anonymous|0 $closure/testMultipleClosuresInArray~anonymous|0 $closure/testCaptureInTernary~anonymous|0 $closure/testCaptureFromCondition~anonymous|0 $closure/testDeepLoopCapture~anonymous|0 $closure/makeCounter~anonymous|0 $closure/testDefaultParamCapture~anonymous|0@varargs $closure/testDefaultParamWithOtherParam~anonymous|0@varargs) + (export "memory" (memory $0)) + (start $~start) + (func $closure/testCaptureParam~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 256 + i32.const 320 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 128 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 64 + i32.const 400 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 400 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 64 + i32.const 128 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $closure/testCaptureParam (param $x i32) (result i32) + (local $$env i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $x + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 1 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testCaptureVar~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureVar (result i32) + (local $$env i32) + (local $x i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 2 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testCaptureLet~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureLet (result i32) + (local $$env i32) + (local $x i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 200 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 3 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testClosureWrite~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure/testClosureWrite~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testMultipleCaptures~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + ) + (func $closure/testMultipleCaptures (param $a i32) (param $b i32) (result i32) + (local $$env i32) + (local $c i32) + (local $4 i32) + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + local.get $a + i32.store offset=4 + local.get $$env + local.get $b + i32.store offset=8 + local.get $$env + i32.const 10 + i32.store offset=12 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 6 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + return + ) + (func $closure/testSharedEnvironment~anonymous|0 (param $x i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $x + i32.store offset=4 + ) + (func $closure/testSharedEnvironment~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureInWhile~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInDoWhile~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.mul + i32.store offset=4 + ) + (func $closure/testCaptureInFor~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 10 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|1 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 20 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|2 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.const 99 + i32.store offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|1 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=8 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|2 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + ) + (func $~lib/rt/__newBuffer (param $size i32) (param $id i32) (param $data i32) (result i32) + (local $buffer i32) + local.get $size + local.get $id + call $~lib/rt/itcms/__new + local.set $buffer + local.get $data + if + local.get $buffer + local.get $data + local.get $size + memory.copy + end + local.get $buffer + return + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array<%28%29=>i32>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array<%28%29=>i32>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $closure/testNestedClosureCapture~anonymous|0~anonymous|0 (param $y i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $y + i32.add + ) + (func $closure/testNestedClosureCapture~anonymous|0 (result i32) + (local $$closureEnv i32) + (local $1 i32) + global.get $~lib/__closure_env + local.set $$closureEnv + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.set $1 + local.get $1 + i32.const 18 + i32.store + local.get $1 + local.get $$closureEnv + i32.store offset=4 + local.get $1 + return + ) + (func $closure/testMultipleClosuresInArray~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $~lib/array/Array<%28%29=>void>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<%28%29=>void>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<%28%29=>void>#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $closure/testCaptureInTernary~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load8_u offset=4 + if (result i32) + local.get $$closureEnv + i32.load offset=8 + else + local.get $$closureEnv + i32.load offset=12 + end + ) + (func $closure/testCaptureFromCondition~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.gt_s + ) + (func $closure/testDeepLoopCapture~anonymous|0 + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + local.get $$closureEnv + i32.load offset=8 + i32.add + local.get $$closureEnv + i32.load offset=12 + i32.add + i32.store offset=4 + ) + (func $closure/makeCounter~anonymous|0 (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $$closureEnv + local.get $$closureEnv + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $$closureEnv + i32.load offset=4 + return + ) + (func $closure/makeCounter (result i32) + (local $$env i32) + (local $count i32) + (local $2 i32) + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 24 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + return + ) + (func $closure/testDefaultParamCapture~anonymous|0 (param $x i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $x + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0 (param $a i32) (param $b i32) (result i32) + (local $$closureEnv i32) + global.get $~lib/__closure_env + local.set $$closureEnv + local.get $b + ) + (func $start:closure + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 208 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 352 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 42 + call $closure/testCaptureParam + global.set $closure/fn1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn1 + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureVar + global.set $closure/fn2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn2 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $0) + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureLet + global.set $closure/fn3 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn3 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 200 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testClosureWrite + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2 + call $closure/testMultipleCaptures + global.set $closure/fn5 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/fn5 + local.tee $3 + i32.store offset=12 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 13 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testSharedEnvironment + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInWhile + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 70 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInDoWhile + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 83 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInFor + i32.const 15 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure/testCaptureInSwitch + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 118 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure/testCaptureInSwitch + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 119 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + call $closure/testCaptureInSwitch + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 120 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInArrayLiteral + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 133 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testNestedClosureCapture + i32.const 123 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 144 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testMultipleClosuresInArray + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureInTernary + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 174 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testCaptureFromCondition + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 186 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testDeepLoopCapture + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/makeCounter + global.set $closure/counter1 + call $closure/makeCounter + global.set $closure/counter2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + local.tee $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 212 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + local.tee $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 213 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter2 + local.tee $6 + i32.store offset=24 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 214 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter1 + local.tee $7 + i32.store offset=28 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 215 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + global.get $closure/counter2 + local.tee $8 + i32.store offset=32 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testDefaultParamCapture + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 224 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/testDefaultParamWithOtherParam + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 232 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure/testDefaultParamCapture~anonymous|0@varargs (param $x i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + local.set $x + end + local.get $x + call $closure/testDefaultParamCapture~anonymous|0 + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0@varargs (param $a i32) (param $b i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + local.get $a + global.get $~lib/__closure_env + i32.load offset=4 + i32.mul + local.set $b + end + local.get $a + local.get $b + call $closure/testDefaultParamWithOtherParam~anonymous|0 + ) + (func $~start + call $start:closure + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 34448 + i32.const 34496 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 1072 + i32.const 1024 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 256 + i32.const 1024 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array<%28%29=>i32>#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 1 + drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1024 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1120 + i32.const 1024 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure/testCaptureInArrayLiteral (result i32) + (local $$env i32) + (local $x i32) + (local $y i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $fns i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 5 + i32.store offset=4 + local.get $$env + i32.const 10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3 + i32.const 2 + i32.const 7 + i32.const 0 + call $~lib/rt/__newArray + local.tee $3 + i32.store + local.get $3 + i32.const 0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 15 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + i32.const 1 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 16 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + i32.const 2 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $6 + local.get $6 + i32.const 17 + i32.store + local.get $6 + local.get $$env + i32.store offset=4 + local.get $6 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $3 + local.tee $fns + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $8 + i32.store offset=12 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $9 + i32.store offset=16 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fns + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=8 + local.get $11 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $10 + i32.store offset=20 + local.get $10 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $10 + i32.load + call_indirect (type $0) + i32.add + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/array/Array<%28%29=>void>#push (param $this i32) (param $value i32) (result i32) + (local $oldLen i32) + (local $len i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28%29=>void>#get:length_ + local.set $oldLen + local.get $oldLen + i32.const 1 + i32.add + local.set $len + local.get $this + local.get $len + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + i32.const 1 + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array<%28%29=>void>#get:dataStart + local.get $oldLen + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $len + call $~lib/array/Array<%28%29=>void>#set:length_ + local.get $len + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/array/Array<%28%29=>void>#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array<%28%29=>void>#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array<%28%29=>void>#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>void>#get:length_ + i32.ge_u + if + i32.const 256 + i32.const 1024 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<%28%29=>void>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $value + i32.store offset=4 + i32.const 1 + drop + i32.const 0 + i32.eqz + drop + local.get $value + i32.eqz + if + i32.const 1120 + i32.const 1024 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $closure/testMultipleClosuresInArray (result i32) + (local $$env i32) + (local $shared i32) + (local $2 i32) + (local $incrementers i32) + (local $i i32) + (local $5 i32) + (local $i|6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 2 + i32.const 11 + i32.const 1376 + call $~lib/rt/__newArray + local.tee $incrementers + i32.store + i32.const 0 + local.set $i + loop $for-loop|2 + local.get $i + i32.const 3 + i32.lt_s + if + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $5 + local.get $5 + i32.const 20 + i32.store + local.get $5 + local.get $$env + i32.store offset=4 + local.get $5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/array/Array<%28%29=>void>#push + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|2 + end + end + i32.const 0 + local.set $i|6 + loop $for-loop|3 + local.get $i|6 + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array<%28%29=>void>#get:length + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $incrementers + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $i|6 + call $~lib/array/Array<%28%29=>void>#__get + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|3 + end + end + local.get $$env + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure/testClosureWrite (result i32) + (local $$env i32) + (local $counter i32) + (local $2 i32) + (local $increment i32) + (local $4 i32) + (local $getCounter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 4 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $increment + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 5 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getCounter + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $increment + local.tee $8 + i32.store offset=16 + local.get $8 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $8 + i32.load + call_indirect (type $3) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getCounter + local.tee $9 + i32.store offset=20 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $0) + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $closure/testSharedEnvironment (result i32) + (local $$env i32) + (local $value i32) + (local $2 i32) + (local $setter i32) + (local $4 i32) + (local $getter i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 7 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $setter + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 8 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $getter + i32.store offset=4 + i32.const 50 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $setter + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $5) + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $getter + local.tee $7 + i32.store offset=12 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure/testCaptureInWhile (result i32) + (local $$env i32) + (local $sum i32) + (local $i i32) + (local $3 i32) + (local $adder i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + local.get $$env + i32.const 0 + i32.store offset=8 + loop $while-continue|1 + local.get $$env + i32.load offset=8 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 9 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $adder + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $adder + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $while-continue|1 + end + end + local.get $$env + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure/testCaptureInDoWhile (result i32) + (local $$env i32) + (local $product i32) + (local $i i32) + (local $3 i32) + (local $multiplier i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store offset=4 + local.get $$env + i32.const 1 + i32.store offset=8 + loop $do-loop|1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 10 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $multiplier + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $multiplier + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + local.get $$env + i32.load offset=8 + i32.const 4 + i32.le_s + br_if $do-loop|1 + end + local.get $$env + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure/testCaptureInFor (result i32) + (local $$env i32) + (local $result i32) + (local $i i32) + (local $3 i32) + (local $addI i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + local.get $$env + i32.const 1 + i32.store offset=8 + loop $for-loop|1 + local.get $$env + i32.load offset=8 + i32.const 5 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 11 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $addI + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addI + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $3) + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $for-loop|1 + end + end + local.get $$env + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $closure/testCaptureInSwitch (param $x i32) (result i32) + (local $$env i32) + (local $captured i32) + (local $3 i32) + (local $4 i32) + (local $setCaptured i32) + (local $6 i32) + (local $7 i32) + (local $setCaptured|8 i32) + (local $9 i32) + (local $10 i32) + (local $setCaptured|11 i32) + (local $12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + block $break|1 + block $case2|1 + block $case1|1 + block $case0|1 + local.get $x + local.set $3 + local.get $3 + i32.const 1 + i32.eq + br_if $case0|1 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|1 + br $case2|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 12 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $setCaptured + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured + local.tee $6 + i32.store offset=4 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + br $break|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $7 + local.get $7 + i32.const 13 + i32.store + local.get $7 + local.get $$env + i32.store offset=4 + local.get $7 + local.tee $setCaptured|8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured|8 + local.tee $9 + i32.store offset=12 + local.get $9 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $9 + i32.load + call_indirect (type $3) + br $break|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $10 + local.get $10 + i32.const 14 + i32.store + local.get $10 + local.get $$env + i32.store offset=4 + local.get $10 + local.tee $setCaptured|11 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $setCaptured|11 + local.tee $12 + i32.store offset=20 + local.get $12 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $12 + i32.load + call_indirect (type $3) + br $break|1 + end + local.get $$env + i32.load offset=4 + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testNestedClosureCapture (result i32) + (local $$env i32) + (local $outer i32) + (local $2 i32) + (local $makeAdder i32) + (local $4 i32) + (local $adder i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 100 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 19 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $makeAdder + i32.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $makeAdder + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $0) + local.tee $adder + i32.store offset=8 + i32.const 23 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $adder + local.tee $6 + i32.store offset=12 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $1) + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testCaptureInTernary (result i32) + (local $$env i32) + (local $flag i32) + (local $a i32) + (local $b i32) + (local $4 i32) + (local $chooser i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 1 + i32.store8 offset=4 + local.get $$env + i32.const 10 + i32.store offset=8 + local.get $$env + i32.const 20 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 21 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $chooser + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $chooser + local.tee $6 + i32.store offset=4 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 170 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.const 0 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $chooser + local.tee $7 + i32.store offset=8 + local.get $7 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $7 + i32.load + call_indirect (type $0) + local.set $8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + return + ) + (func $closure/testCaptureFromCondition (result i32) + (local $$env i32) + (local $threshold i32) + (local $value i32) + (local $3 i32) + (local $isAboveThreshold i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 12 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 50 + i32.store offset=8 + local.get $$env + i32.const 75 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.set $3 + local.get $3 + i32.const 22 + i32.store + local.get $3 + local.get $$env + i32.store offset=4 + local.get $3 + local.tee $isAboveThreshold + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $isAboveThreshold + local.tee $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 464 + i32.const 182 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $$env + i32.const 25 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $isAboveThreshold + local.tee $6 + i32.store offset=8 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $0) + if (result i32) + i32.const 1 + else + i32.const 0 + end + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testDeepLoopCapture (result i32) + (local $$env i32) + (local $total i32) + (local $i i32) + (local $j i32) + (local $4 i32) + (local $addBoth i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 16 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 0 + i32.store offset=4 + local.get $$env + i32.const 0 + i32.store offset=8 + loop $for-loop|2 + local.get $$env + i32.load offset=8 + i32.const 2 + i32.lt_s + if + local.get $$env + i32.const 0 + i32.store offset=12 + loop $for-loop|3 + local.get $$env + i32.load offset=12 + i32.const 2 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.set $4 + local.get $4 + i32.const 23 + i32.store + local.get $4 + local.get $$env + i32.store offset=4 + local.get $4 + local.tee $addBoth + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $addBoth + local.tee $6 + i32.store offset=4 + local.get $6 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $6 + i32.load + call_indirect (type $3) + local.get $$env + local.get $$env + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|3 + end + end + local.get $$env + local.get $$env + i32.load offset=8 + i32.const 1 + i32.add + i32.store offset=8 + br $for-loop|2 + end + end + local.get $$env + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $closure/testDefaultParamCapture (result i32) + (local $$env i32) + (local $defaultVal i32) + (local $2 i32) + (local $fn i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 42 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 13 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 25 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn + i32.store + i32.const 0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $closure/testDefaultParamWithOtherParam (result i32) + (local $$env i32) + (local $multiplier i32) + (local $2 i32) + (local $fn i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 8 + call $~lib/rt/tlsf/__alloc + local.set $$env + local.get $$env + i32.const 0 + i32.store + local.get $$env + i32.const 3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.set $2 + local.get $2 + i32.const 26 + i32.store + local.get $2 + local.get $$env + i32.store offset=4 + local.get $2 + local.tee $fn + i32.store + i32.const 10 + i32.const 0 + global.get $~lib/memory/__stack_pointer + i32.const 1 + global.set $~argumentsLength + local.get $fn + local.tee $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $4) + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1072 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1120 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>#__visit + ) + (func $~lib/array/Array<%28%29=>i32>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit + ) + (func $~lib/array/Array<%28%29=>void>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32?%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32?%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32?%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32?%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32?%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32?%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%2Ci32?%29=>i32> + block $~lib/function/Function<%28i32?%29=>i32> + block $~lib/function/Function<%28%29=>bool> + block $~lib/array/Array<%28%29=>void> + block $~lib/function/Function<%28%29=>%28i32%29=>i32> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/function/Function<%28i32%29=>void> + block $~lib/function/Function<%28%29=>void> + block $~lib/function/Function<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%29=>void> $~lib/array/Array<%28%29=>i32> $~lib/array/Array $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%29=>%28i32%29=>i32> $~lib/array/Array<%28%29=>void> $~lib/function/Function<%28%29=>bool> $~lib/function/Function<%28i32?%29=>i32> $~lib/function/Function<%28i32%2Ci32?%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32?%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32?%29=>i32>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>i32>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>void>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>void>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<%28%29=>void>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32?%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32?%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32?%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32?%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/closure.json b/tests/compiler/closure.json index 043415b403..454738fb3d 100644 --- a/tests/compiler/closure.json +++ b/tests/compiler/closure.json @@ -1,17 +1,5 @@ { "asc_flags": [ - ], - "stderr": [ - "AS100: Not implemented: Closures", - "$local1; // closure 1", - "AS100: Not implemented: Closures", - "$local0; // closure 2", - "AS100: Not implemented: Closures", - "$local0; // closure 3", - "AS100: Not implemented: Closures", - "$local0(123); // closure 4", - "AS100: Not implemented: Closures", - "$local0 = 10; // closure 5", - "EOF" + "--enable", "closures" ] } diff --git a/tests/compiler/closure.release.wat b/tests/compiler/closure.release.wat new file mode 100644 index 0000000000..e32be6101e --- /dev/null +++ b/tests/compiler/closure.release.wat @@ -0,0 +1,4258 @@ +(module + (type $0 (func (result i32))) + (type $1 (func)) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i64))) + (type $9 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/__closure_env (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $closure/fn1 (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $closure/fn2 (mut i32) (i32.const 0)) + (global $closure/fn3 (mut i32) (i32.const 0)) + (global $closure/fn5 (mut i32) (i32.const 0)) + (global $closure/counter1 (mut i32) (i32.const 0)) + (global $closure/counter2 (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35440)) + (memory $0 1) + (data $0 (i32.const 1036) "\1c") + (data $0.1 (i32.const 1048) "\04\00\00\00\08\00\00\00\01") + (data $1 (i32.const 1068) "<") + (data $1.1 (i32.const 1080) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $2 (i32.const 1132) "<") + (data $2.1 (i32.const 1144) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $5 (i32.const 1260) "<") + (data $5.1 (i32.const 1272) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $6 (i32.const 1324) ",") + (data $6.1 (i32.const 1336) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $8 (i32.const 1404) "<") + (data $8.1 (i32.const 1416) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $9 (i32.const 1468) ",") + (data $9.1 (i32.const 1480) "\02\00\00\00\14\00\00\00c\00l\00o\00s\00u\00r\00e\00.\00t\00s") + (data $10 (i32.const 1516) "\1c") + (data $10.1 (i32.const 1528) "\04\00\00\00\08\00\00\00\02") + (data $11 (i32.const 1548) "\1c") + (data $11.1 (i32.const 1560) "\04\00\00\00\08\00\00\00\03") + (data $12 (i32.const 1580) "\1c") + (data $12.1 (i32.const 1592) "\05\00\00\00\08\00\00\00\04") + (data $13 (i32.const 1612) "\1c") + (data $13.1 (i32.const 1624) "\04\00\00\00\08\00\00\00\05") + (data $14 (i32.const 1644) "\1c") + (data $14.1 (i32.const 1656) "\04\00\00\00\08\00\00\00\06") + (data $15 (i32.const 1676) "\1c") + (data $15.1 (i32.const 1688) "\06\00\00\00\08\00\00\00\07") + (data $16 (i32.const 1708) "\1c") + (data $16.1 (i32.const 1720) "\04\00\00\00\08\00\00\00\08") + (data $17 (i32.const 1740) "\1c") + (data $17.1 (i32.const 1752) "\05\00\00\00\08\00\00\00\t") + (data $18 (i32.const 1772) "\1c") + (data $18.1 (i32.const 1784) "\05\00\00\00\08\00\00\00\n") + (data $19 (i32.const 1804) "\1c") + (data $19.1 (i32.const 1816) "\05\00\00\00\08\00\00\00\0b") + (data $20 (i32.const 1836) "\1c") + (data $20.1 (i32.const 1848) "\05\00\00\00\08\00\00\00\0c") + (data $21 (i32.const 1868) "\1c") + (data $21.1 (i32.const 1880) "\05\00\00\00\08\00\00\00\r") + (data $22 (i32.const 1900) "\1c") + (data $22.1 (i32.const 1912) "\05\00\00\00\08\00\00\00\0e") + (data $23 (i32.const 1932) "\1c") + (data $23.1 (i32.const 1944) "\04\00\00\00\08\00\00\00\0f") + (data $24 (i32.const 1964) "\1c") + (data $24.1 (i32.const 1976) "\04\00\00\00\08\00\00\00\10") + (data $25 (i32.const 1996) "\1c") + (data $25.1 (i32.const 2008) "\04\00\00\00\08\00\00\00\11") + (data $26 (i32.const 2028) ",") + (data $26.1 (i32.const 2040) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $27 (i32.const 2076) ",") + (data $27.1 (i32.const 2088) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $28 (i32.const 2124) "|") + (data $28.1 (i32.const 2136) "\02\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data $29 (i32.const 2252) "\1c") + (data $29.1 (i32.const 2264) "\t\00\00\00\08\00\00\00\12") + (data $30 (i32.const 2284) "\1c") + (data $30.1 (i32.const 2296) "\n\00\00\00\08\00\00\00\13") + (data $31 (i32.const 2316) "\1c") + (data $31.1 (i32.const 2328) "\01") + (data $32 (i32.const 2348) "\1c") + (data $32.1 (i32.const 2360) "\05\00\00\00\08\00\00\00\14") + (data $33 (i32.const 2380) "\1c") + (data $33.1 (i32.const 2392) "\01") + (data $34 (i32.const 2412) "\1c") + (data $34.1 (i32.const 2424) "\04\00\00\00\08\00\00\00\15") + (data $35 (i32.const 2444) "\1c") + (data $35.1 (i32.const 2456) "\0c\00\00\00\08\00\00\00\16") + (data $36 (i32.const 2476) "\1c") + (data $36.1 (i32.const 2488) "\05\00\00\00\08\00\00\00\17") + (data $37 (i32.const 2508) "\1c") + (data $37.1 (i32.const 2520) "\04\00\00\00\08\00\00\00\18") + (data $38 (i32.const 2540) "\1c") + (data $38.1 (i32.const 2552) "\r\00\00\00\08\00\00\00\19") + (data $39 (i32.const 2572) "\1c") + (data $39.1 (i32.const 2584) "\0e\00\00\00\08\00\00\00\1a") + (data $40 (i32.const 2608) "\0f\00\00\00 \00\00\00 \00\00\00 ") + (data $40.1 (i32.const 2640) "\02A\00\00\02\t") + (data $40.2 (i32.const 2656) "\02A") + (table $0 27 27 funcref) + (elem $0 (i32.const 1) $closure/testCaptureParam~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testMultipleCaptures~anonymous|0 $closure/testSharedEnvironment~anonymous|0 $closure/testCaptureParam~anonymous|0 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInDoWhile~anonymous|0 $closure/testCaptureInWhile~anonymous|0 $closure/testCaptureInSwitch~anonymous|0 $closure/testCaptureInSwitch~anonymous|1 $closure/testCaptureInSwitch~anonymous|2 $closure/testCaptureParam~anonymous|0 $closure/testCaptureInArrayLiteral~anonymous|1 $closure/testCaptureInArrayLiteral~anonymous|2 $closure/testNestedClosureCapture~anonymous|0~anonymous|0 $closure/testNestedClosureCapture~anonymous|0 $closure/testClosureWrite~anonymous|0 $closure/testCaptureInTernary~anonymous|0 $closure/testCaptureFromCondition~anonymous|0 $closure/testDeepLoopCapture~anonymous|0 $closure/makeCounter~anonymous|0 $closure/testDefaultParamCapture~anonymous|0@varargs $closure/testDefaultParamWithOtherParam~anonymous|0@varargs) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1088 + i32.const 1152 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 16 + i32.add + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 35440 + i32.const 0 + i32.store + i32.const 37008 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 35440 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 35440 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 35440 + i32.const 37012 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 35440 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.gt_u + if + i32.const 1088 + i32.const 1424 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + local.get $3 + i32.const 256 + i32.ge_u + if (result i32) + local.get $3 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $3 + i32.const 1 + i32.const 27 + local.get $3 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $3 + end + else + local.get $3 + end + i32.const 4 + local.get $0 + i32.load offset=1568 + memory.size + local.tee $1 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $1 + local.get $2 + local.get $1 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $0 + local.get $1 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $0 + local.get $3 + call $~lib/rt/tlsf/searchBlock + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $3 + local.get $1 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + i32.load + local.set $4 + local.get $3 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1424 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const -4 + i32.and + local.get $3 + i32.sub + local.tee $2 + i32.const 16 + i32.ge_u + if + local.get $1 + local.get $3 + local.get $4 + i32.const 2 + i32.and + i32.or + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + local.get $2 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $0 + local.get $3 + call $~lib/rt/tlsf/insertBlock + else + local.get $1 + local.get $4 + i32.const -2 + i32.and + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $0 + local.get $0 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $1 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $closure/testCaptureParam~anonymous|0 (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + local.tee $3 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $0 + local.get $1 + local.get $2 + select + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $3 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/array/Array<%28%29=>i32>#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1280 + i32.const 2048 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2144 + i32.const 2048 + i32.const 120 + i32.const 40 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1424 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$200 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 35440 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$200 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 2608 + i32.load + i32.gt_u + if + i32.const 1280 + i32.const 1344 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 2612 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/array/Array<%28%29=>void> + block $~lib/array/Array + block $~lib/array/Array<%28%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner0 $folding-inner0 $~lib/array/Array<%28%29=>i32> $~lib/array/Array $folding-inner0 $folding-inner0 $~lib/array/Array<%28%29=>void> $folding-inner0 $folding-inner0 $folding-inner0 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + local.get $0 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $0 + call $~lib/array/Array<%28%29=>i32>~visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/array/Array<%28%29=>i32>#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1280 + i32.const 2048 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure/testCaptureInSwitch (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + block $break|1 + block $case2|1 + block $case1|1 + local.get $0 + i32.const 1 + i32.ne + if + local.get $0 + i32.const 2 + i32.eq + br_if $case1|1 + br $case2|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 12 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + br $break|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 13 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.store offset=8 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + br $break|1 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 14 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + i32.store offset=16 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + end + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $1) + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1424 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1424 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1424 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1280 + call $~lib/rt/itcms/__visit + i32.const 2096 + call $~lib/rt/itcms/__visit + i32.const 2144 + call $~lib/rt/itcms/__visit + i32.const 1088 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + i32.shl + local.tee $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $3 + local.get $2 + if + local.get $3 + local.get $2 + local.get $4 + memory.copy + end + local.get $3 + i32.store + i32.const 16 + local.get $1 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $3 + i32.store + local.get $1 + local.get $3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $1 + local.get $3 + i32.store offset=4 + local.get $1 + local.get $4 + i32.store offset=8 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/ensureCapacity (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 268435455 + i32.gt_u + if + i32.const 2096 + i32.const 2048 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$190 + i32.const 1073741820 + local.get $2 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.tee $3 + local.get $0 + i32.load + local.tee $2 + i32.const 20 + i32.sub + local.tee $4 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $4 + local.get $3 + i32.store offset=16 + local.get $2 + local.set $1 + br $__inlined_func$~lib/rt/itcms/__renew$190 + end + local.get $3 + local.get $4 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $1 + local.get $2 + local.get $3 + local.get $4 + i32.load offset=16 + local.tee $4 + local.get $3 + local.get $4 + i32.lt_u + select + memory.copy + end + local.get $1 + local.get $2 + i32.ne + if + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $3 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<%28%29=>i32>~visit (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + if + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.shl + i32.add + local.set $2 + loop $while-continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + local.get $1 + i32.load + local.tee $3 + if + local.get $3 + call $~lib/rt/itcms/__visit + end + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $closure/testClosureWrite~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInWhile~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.store offset=4 + ) + (func $closure/makeCounter (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $1 + i32.const 4 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.const 24 + i32.store + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + ) + (func $~start + call $start:closure + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 35440 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 35440 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 35440 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1424 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $start:closure + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 36 + memory.fill + memory.size + i32.const 16 + i32.shl + i32.const 35440 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/pinSpace + i32.const 1236 + i32.const 1232 + i32.store + i32.const 1240 + i32.const 1232 + i32.store + i32.const 1232 + global.set $~lib/rt/itcms/toSpace + i32.const 1380 + i32.const 1376 + i32.store + i32.const 1384 + i32.const 1376 + i32.store + i32.const 1376 + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 42 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 1 + i32.store + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + global.set $closure/fn1 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/fn1 + local.tee $2 + i32.store + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 6 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 100 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 2 + i32.store + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + global.set $closure/fn2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/fn2 + local.tee $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 14 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 200 + i32.store offset=8 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 3 + i32.store + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + global.set $closure/fn3 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/fn3 + local.tee $2 + i32.store offset=8 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 200 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 4 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 5 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=16 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $4 + i32.load + call_indirect (type $1) + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 1 + i32.store offset=8 + local.get $2 + i32.const 2 + i32.store offset=12 + local.get $2 + i32.const 10 + i32.store offset=16 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 6 + i32.store + local.get $2 + local.get $3 + i32.store offset=4 + local.get $2 + global.set $closure/fn5 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/fn5 + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 42 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 7 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 8 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store offset=4 + i32.const 1 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 50 + local.get $4 + i32.load + call_indirect (type $3) + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + i32.const 0 + i32.store offset=12 + loop $while-continue|1 + local.get $2 + i32.load offset=12 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 9 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $while-continue|1 + end + end + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 70 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 1 + i32.store offset=8 + local.get $2 + i32.const 1 + i32.store offset=12 + loop $do-loop|1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 10 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.load offset=12 + i32.const 4 + i32.le_s + br_if $do-loop|1 + end + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 24 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 83 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + i32.const 1 + i32.store offset=12 + loop $for-loop|1 + local.get $2 + i32.load offset=12 + i32.const 5 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 11 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $5 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $5 + i32.load + call_indirect (type $1) + local.get $2 + local.get $2 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|1 + end + end + local.get $2 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 15 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + call $closure/testCaptureInSwitch + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 118 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2 + call $closure/testCaptureInSwitch + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 119 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 3 + call $closure/testCaptureInSwitch + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 120 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 5 + i32.store offset=8 + local.get $2 + i32.const 10 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3 + i32.const 7 + i32.const 0 + call $~lib/rt/__newArray + local.tee $4 + i32.store + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 15 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $4 + i32.const 0 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 16 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $4 + i32.const 1 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 17 + i32.store + local.get $5 + local.get $3 + i32.store offset=4 + local.get $4 + i32.const 2 + local.get $5 + call $~lib/array/Array<%28%29=>i32>#__set + local.get $4 + i32.store offset=4 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $2 + i32.load + call_indirect (type $0) + local.set $2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 1 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=16 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $2 + i32.add + local.set $2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $3 + i32.store offset=20 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + local.get $2 + i32.add + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 133 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $2 + i32.const 4 + i32.add + local.tee $3 + i32.const 0 + i32.store + local.get $2 + i32.const 100 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 19 + i32.store + local.get $4 + local.get $3 + i32.store offset=4 + local.get $4 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.load offset=4 + global.set $~lib/__closure_env + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.load + call_indirect (type $0) + local.tee $2 + i32.store offset=8 + i32.const 1 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 23 + local.get $2 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 123 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 144 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $4 + i32.const 4 + i32.add + local.tee $5 + i32.const 0 + i32.store + local.get $4 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 11 + i32.const 2400 + call $~lib/rt/__newArray + local.tee $6 + i32.store + loop $for-loop|2 + local.get $1 + i32.const 3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 20 + i32.store + local.get $2 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $6 + i32.load offset=12 + local.tee $3 + i32.const 1 + i32.add + local.tee $7 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + i32.load offset=4 + local.get $3 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $6 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + loop $for-loop|3 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + i32.load offset=12 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + local.get $1 + i32.lt_s + if + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + local.get $0 + call $~lib/array/Array<%28%29=>i32>#__get + local.tee $1 + i32.store offset=12 + local.get $1 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $1 + i32.load + call_indirect (type $1) + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 + end + end + local.get $4 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 161 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 1 + i32.store8 offset=8 + local.get $0 + i32.const 10 + i32.store offset=12 + local.get $0 + i32.const 20 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 21 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 170 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 0 + i32.store8 offset=8 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 174 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 12 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 50 + i32.store offset=12 + local.get $0 + i32.const 75 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 22 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.eqz + if + i32.const 0 + i32.const 1488 + i32.const 182 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 25 + i32.store offset=8 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ne + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + if + i32.const 0 + i32.const 1488 + i32.const 186 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 16 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 0 + i32.store offset=12 + loop $for-loop|20 + local.get $0 + i32.load offset=12 + i32.const 2 + i32.lt_s + if + local.get $0 + i32.const 0 + i32.store offset=16 + loop $for-loop|31 + local.get $0 + i32.load offset=16 + i32.const 2 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $3 + i32.const 23 + i32.store + local.get $3 + local.get $1 + i32.store offset=4 + local.get $3 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $3 + i32.load + call_indirect (type $1) + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + br $for-loop|31 + end + end + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + br $for-loop|20 + end + end + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 200 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $closure/makeCounter + global.set $closure/counter1 + call $closure/makeCounter + global.set $closure/counter2 + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + local.tee $0 + i32.store offset=16 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 212 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + local.tee $0 + i32.store offset=20 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 213 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter2 + local.tee $0 + i32.store offset=24 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 214 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter1 + local.tee $0 + i32.store offset=28 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 215 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + global.get $closure/counter2 + local.tee $0 + i32.store offset=32 + local.get $0 + i32.load offset=4 + global.set $~lib/__closure_env + local.get $0 + i32.load + call_indirect (type $0) + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 216 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 42 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 25 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + i32.const 0 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 0 + local.get $2 + i32.load + call_indirect (type $4) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 224 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2672 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + i32.const 8 + call $~lib/rt/tlsf/allocateBlock + local.tee $0 + i32.const 4 + i32.add + local.tee $1 + i32.const 0 + i32.store + local.get $0 + i32.const 3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 26 + i32.store + local.get $2 + local.get $1 + i32.store offset=4 + local.get $2 + i32.store + i32.const 1 + global.set $~argumentsLength + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.load offset=4 + global.set $~lib/__closure_env + i32.const 10 + i32.const 0 + local.get $2 + i32.load + call_indirect (type $2) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1488 + i32.const 232 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 36 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 35472 + i32.const 35520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $closure/testSharedEnvironment~anonymous|0 (param $0 i32) + global.get $~lib/__closure_env + i32.const 50 + i32.store offset=4 + ) + (func $closure/testNestedClosureCapture~anonymous|0~anonymous|0 (param $0 i32) (result i32) + global.get $~lib/__closure_env + i32.load offset=4 + local.get $0 + i32.add + ) + (func $closure/testNestedClosureCapture~anonymous|0 (result i32) + (local $0 i32) + (local $1 i32) + global.get $~lib/__closure_env + local.set $1 + i32.const 8 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $0 + i32.const 18 + i32.store + local.get $0 + local.get $1 + i32.store offset=4 + local.get $0 + ) + (func $closure/testMultipleCaptures~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + ) + (func $closure/testDefaultParamWithOtherParam~anonymous|0@varargs (param $0 i32) (param $1 i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + i32.const 10 + i32.mul + local.set $1 + end + local.get $1 + ) + (func $closure/testDefaultParamCapture~anonymous|0@varargs (param $0 i32) (result i32) + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/__closure_env + i32.load offset=4 + local.set $0 + end + local.get $0 + ) + (func $closure/testDeepLoopCapture~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=12 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + i32.add + i32.store offset=4 + ) + (func $closure/testCaptureInTernary~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load8_u offset=4 + if (result i32) + local.get $0 + i32.load offset=8 + else + local.get $0 + i32.load offset=12 + end + ) + (func $closure/testCaptureInSwitch~anonymous|2 + global.get $~lib/__closure_env + i32.const 99 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|1 + global.get $~lib/__closure_env + i32.const 20 + i32.store offset=4 + ) + (func $closure/testCaptureInSwitch~anonymous|0 + global.get $~lib/__closure_env + i32.const 10 + i32.store offset=4 + ) + (func $closure/testCaptureInDoWhile~anonymous|0 + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.mul + i32.store offset=4 + ) + (func $closure/testCaptureInArrayLiteral~anonymous|2 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.add + ) + (func $closure/testCaptureInArrayLiteral~anonymous|1 (result i32) + global.get $~lib/__closure_env + i32.load offset=8 + ) + (func $closure/testCaptureFromCondition~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + i32.gt_s + ) + (func $closure/makeCounter~anonymous|0 (result i32) + (local $0 i32) + global.get $~lib/__closure_env + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.add + i32.store offset=4 + local.get $0 + i32.load offset=4 + ) +) diff --git a/tests/compiler/closure.ts b/tests/compiler/closure.ts index 26ba15304b..b181b2547f 100644 --- a/tests/compiler/closure.ts +++ b/tests/compiler/closure.ts @@ -1,39 +1,232 @@ -function testParam($local0: i32, $local1: i32): (value: i32) => i32 { - return function inner(value: i32) { - return $local1; // closure 1 - }; +// Test 1: Basic closure capturing parameter - read +function testCaptureParam(x: i32): () => i32 { + return (): i32 => x; } -testParam(1, 2); +let fn1 = testCaptureParam(42); +assert(fn1() == 42); -function testVar(): (value: i32) => i32 { - var $local0 = 0; - return function inner(value: i32) { - return $local0; // closure 2 - }; +// Test 2: Basic closure capturing var - read +function testCaptureVar(): () => i32 { + var x = 100; + return (): i32 => x; } -testVar(); +let fn2 = testCaptureVar(); +assert(fn2() == 100); -function testLet(): (value: i32) => i32 { - let $local0 = 0; - return function inner(value: i32): i32 { - return $local0; // closure 3 - }; +// Test 3: Basic closure capturing let - read +function testCaptureLet(): () => i32 { + let x = 200; + return (): i32 => x; +} +let fn3 = testCaptureLet(); +assert(fn3() == 200); + +// Test 4: Closure with write - mutation affects outer scope +function testClosureWrite(): i32 { + let counter = 0; + let increment = (): void => { counter = counter + 1; }; + let getCounter = (): i32 => counter; + increment(); + increment(); + increment(); + return getCounter(); +} +assert(testClosureWrite() == 3); + +// Test 5: Multiple captures +function testMultipleCaptures(a: i32, b: i32): () => i32 { + let c = 10; + return (): i32 => a + b + c; +} +let fn5 = testMultipleCaptures(1, 2); +assert(fn5() == 13); + +// Test 6: Two closures sharing same environment - verify reference semantics +function testSharedEnvironment(): i32 { + let value = 0; + let setter = (x: i32): void => { value = x; }; + let getter = (): i32 => value; + + setter(50); + return getter(); +} +assert(testSharedEnvironment() == 50); + +// ============================================================================ +// Tests for closure capture from various control flow constructs +// ============================================================================ + +// Test 7: Capture from while loop +function testCaptureInWhile(): i32 { + let sum = 0; + let i = 0; + while (i < 3) { + let adder = (): void => { sum = sum + i; }; + adder(); + i++; + } + return sum; // 0 + 1 + 2 = 3 +} +assert(testCaptureInWhile() == 3); + +// Test 8: Capture from do-while loop +function testCaptureInDoWhile(): i32 { + let product = 1; + let i = 1; + do { + let multiplier = (): void => { product = product * i; }; + multiplier(); + i++; + } while (i <= 4); + return product; // 1 * 1 * 2 * 3 * 4 = 24 +} +assert(testCaptureInDoWhile() == 24); + +// Test 9: Capture from for loop +function testCaptureInFor(): i32 { + let result = 0; + for (let i = 1; i <= 5; i++) { + let addI = (): void => { result = result + i; }; + addI(); + } + return result; // 1 + 2 + 3 + 4 + 5 = 15 +} +assert(testCaptureInFor() == 15); + +// Test 10: Capture from switch statement +function testCaptureInSwitch(x: i32): i32 { + let captured = 0; + switch (x) { + case 1: { + let setCaptured = (): void => { captured = 10; }; + setCaptured(); + break; + } + case 2: { + let setCaptured = (): void => { captured = 20; }; + setCaptured(); + break; + } + default: { + let setCaptured = (): void => { captured = 99; }; + setCaptured(); + break; + } + } + return captured; } -testLet(); +assert(testCaptureInSwitch(1) == 10); +assert(testCaptureInSwitch(2) == 20); +assert(testCaptureInSwitch(3) == 99); -function testFuncParam($local0: (x: i32) => void): () => void { - return () => { - $local0(123); // closure 4 +// Test 11: Capture from array literal +function testCaptureInArrayLiteral(): i32 { + let x = 5; + let y = 10; + let fns = [ + (): i32 => x, + (): i32 => y, + (): i32 => x + y + ]; + return fns[0]() + fns[1]() + fns[2](); // 5 + 10 + 15 = 30 +} +assert(testCaptureInArrayLiteral() == 30); + +// Test 12: Closure returning closure (nested capture) +function testNestedClosureCapture(): i32 { + let outer = 100; + let makeAdder = (): (y: i32) => i32 => { + return (y: i32): i32 => outer + y; }; + let adder = makeAdder(); + return adder(23); // 100 + 23 = 123 +} +assert(testNestedClosureCapture() == 123); + +// Test 13: Multiple closures in array capturing same variable +function testMultipleClosuresInArray(): i32 { + let shared = 0; + let incrementers: Array<() => void> = []; + + for (let i = 0; i < 3; i++) { + incrementers.push((): void => { shared = shared + 1; }); + } + + for (let i = 0; i < incrementers.length; i++) { + incrementers[i](); + } + + return shared; // Should be 3 +} +assert(testMultipleClosuresInArray() == 3); + +// Test 14: Closure with ternary expression using captured variable +function testCaptureInTernary(): i32 { + let flag = true; + let a = 10; + let b = 20; + let chooser = (): i32 => flag ? a : b; + + assert(chooser() == 10); + flag = false; + return chooser(); // Should be 20 now } -testFuncParam((x: i32) => {}); +assert(testCaptureInTernary() == 20); + +// Test 15: Closure capturing from condition expression +function testCaptureFromCondition(): i32 { + let threshold = 50; + let value = 75; + let isAboveThreshold = (): bool => value > threshold; -function testAssign(): (value: i32) => void { - let $local0 = 0; - return function inner(value: i32): void { - $local0 = 10; // closure 5 + assert(isAboveThreshold() == true); + value = 25; + return isAboveThreshold() ? 1 : 0; // Should be 0 +} +assert(testCaptureFromCondition() == 0); + +// Test 16: Deeply nested loops with closure +function testDeepLoopCapture(): i32 { + let total = 0; + for (let i = 0; i < 2; i++) { + for (let j = 0; j < 2; j++) { + let addBoth = (): void => { total = total + i + j; }; + addBoth(); + } + } + // i=0,j=0: +0, i=0,j=1: +1, i=1,j=0: +1, i=1,j=1: +2 = 4 + return total; +} +assert(testDeepLoopCapture() == 4); + +// Test 17: Closure capturing counter pattern +function makeCounter(): () => i32 { + let count = 0; + return (): i32 => { + count = count + 1; + return count; }; } -testAssign(); +let counter1 = makeCounter(); +let counter2 = makeCounter(); +assert(counter1() == 1); +assert(counter1() == 2); +assert(counter2() == 1); // Independent counter +assert(counter1() == 3); +assert(counter2() == 2); + +// Test 18: Closure with parameter default value capturing outer variable +function testDefaultParamCapture(): i32 { + let defaultVal = 42; + let fn = (x: i32 = defaultVal): i32 => x; + return fn(); +} +assert(testDefaultParamCapture() == 42); -ERROR("EOF"); +// Test 19: Closure with parameter default value using another param +function testDefaultParamWithOtherParam(): i32 { + let multiplier = 3; + let fn = (a: i32, b: i32 = a * multiplier): i32 => b; + return fn(10); // b defaults to 10 * 3 = 30 +} +assert(testDefaultParamWithOtherParam() == 30); diff --git a/tests/compiler/comma.debug.wat b/tests/compiler/comma.debug.wat index e329144ab1..b15a4d84c0 100644 --- a/tests/compiler/comma.debug.wat +++ b/tests/compiler/comma.debug.wat @@ -1,9 +1,10 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -185,4 +186,49 @@ (func $~start call $start:comma ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/comma.release.wat b/tests/compiler/comma.release.wat index bf36eae36e..1ba62c0758 100644 --- a/tests/compiler/comma.release.wat +++ b/tests/compiler/comma.release.wat @@ -1,14 +1,50 @@ (module - (type $0 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) (type $1 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $comma/a (mut i32) (i32.const 0)) (global $comma/b (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\10\00\00\00c\00o\00m\00m\00a\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start (local $0 i32) (local $1 i32) @@ -26,7 +62,6 @@ i32.const 0 i32.const 1056 i32.const 4 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -35,7 +70,6 @@ i32.const 0 i32.const 1056 i32.const 5 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -52,7 +86,6 @@ i32.const 0 i32.const 1056 i32.const 8 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -63,7 +96,6 @@ i32.const 0 i32.const 1056 i32.const 9 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -104,7 +136,6 @@ i32.const 0 i32.const 1056 i32.const 22 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/constructor.debug.wat b/tests/compiler/constructor.debug.wat index 9e1fc9db1d..6e0601f87b 100644 --- a/tests/compiler/constructor.debug.wat +++ b/tests/compiler/constructor.debug.wat @@ -4,12 +4,13 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -238,7 +240,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2332,165 +2334,6 @@ local.get $c i32.store ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $constructor/emptyCtor - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/emptyCtorWithFieldInit - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/emptyCtorWithFieldNoInit - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/emptyCtorWithFieldAccess - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/none - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/justFieldInit - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/justFieldNoInit - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/ctorReturns - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/ctorConditionallyReturns - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/ctorConditionallyReturnsThis - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $constructor/ctorFieldInitOrder - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $constructor/CtorFieldInitOrder - block $constructor/CtorFieldInitWithoutConstructor - block $constructor/CtorConditionallyReturnsThis - block $constructor/CtorConditionallyReturns - block $constructor/CtorReturns - block $constructor/JustFieldNoInit - block $constructor/JustFieldInit - block $constructor/None - block $constructor/EmptyCtorWithFieldAccess - block $constructor/EmptyCtorWithFieldNoInit - block $constructor/EmptyCtorWithFieldInit - block $constructor/EmptyCtor - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $constructor/EmptyCtor $constructor/EmptyCtorWithFieldInit $constructor/EmptyCtorWithFieldNoInit $constructor/EmptyCtorWithFieldAccess $constructor/None $constructor/JustFieldInit $constructor/JustFieldNoInit $constructor/CtorReturns $constructor/CtorConditionallyReturns $constructor/CtorConditionallyReturnsThis $constructor/CtorFieldInitWithoutConstructor $constructor/CtorFieldInitOrder $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:constructor ) @@ -2507,6 +2350,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $constructor/EmptyCtorWithFieldInit#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3256,4 +3131,163 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $constructor/emptyCtor + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/emptyCtorWithFieldInit + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/emptyCtorWithFieldNoInit + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/emptyCtorWithFieldAccess + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/none + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/justFieldInit + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/justFieldNoInit + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/ctorReturns + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/ctorConditionallyReturns + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/ctorConditionallyReturnsThis + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $constructor/ctorFieldInitOrder + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $constructor/CtorFieldInitOrder + block $constructor/CtorFieldInitWithoutConstructor + block $constructor/CtorConditionallyReturnsThis + block $constructor/CtorConditionallyReturns + block $constructor/CtorReturns + block $constructor/JustFieldNoInit + block $constructor/JustFieldInit + block $constructor/None + block $constructor/EmptyCtorWithFieldAccess + block $constructor/EmptyCtorWithFieldNoInit + block $constructor/EmptyCtorWithFieldInit + block $constructor/EmptyCtor + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $constructor/EmptyCtor $constructor/EmptyCtorWithFieldInit $constructor/EmptyCtorWithFieldNoInit $constructor/EmptyCtorWithFieldAccess $constructor/None $constructor/JustFieldInit $constructor/JustFieldNoInit $constructor/CtorReturns $constructor/CtorConditionallyReturns $constructor/CtorConditionallyReturnsThis $constructor/CtorFieldInitWithoutConstructor $constructor/CtorFieldInitOrder $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/constructor.release.wat b/tests/compiler/constructor.release.wat index 0299cca344..291bf429b1 100644 --- a/tests/compiler/constructor.release.wat +++ b/tests/compiler/constructor.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -44,6 +44,41 @@ (data $9 (i32.const 1488) "\10\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1556 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -82,7 +117,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$153 + block $__inlined_func$~lib/rt/itcms/Object#unlink$154 local.get $1 i32.load offset=4 i32.const -4 @@ -106,7 +141,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$153 + br $__inlined_func$~lib/rt/itcms/Object#unlink$154 end local.get $1 i32.load offset=8 @@ -149,7 +184,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/declare.debug.wat b/tests/compiler/declare.debug.wat index 5bc4580d52..acd8804fd5 100644 --- a/tests/compiler/declare.debug.wat +++ b/tests/compiler/declare.debug.wat @@ -4,8 +4,9 @@ (import "declare" "externalConstant" (global $declare/externalConstant i32)) (import "declare" "my.externalConstant" (global $declare/my.externalConstant i32)) (import "declare" "externalFunction" (func $declare/externalFunction)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "declare" "my.externalFunction" (func $declare/my.externalFunction)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -46,4 +47,49 @@ (func $~start call $start:declare ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/declare.release.wat b/tests/compiler/declare.release.wat index 795c5041aa..d295a43c5e 100644 --- a/tests/compiler/declare.release.wat +++ b/tests/compiler/declare.release.wat @@ -1,16 +1,52 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) (import "declare" "externalConstant" (global $declare/externalConstant i32)) (import "declare" "my.externalConstant" (global $declare/my.externalConstant i32)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "declare" "my.externalFunction" (func $declare/my.externalFunction)) (import "declare" "externalFunction" (func $declare/externalFunction)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\14\00\00\00d\00e\00c\00l\00a\00r\00e\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start call $declare/externalFunction global.get $declare/externalConstant @@ -20,7 +56,6 @@ i32.const 0 i32.const 1056 i32.const 5 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -32,7 +67,6 @@ i32.const 0 i32.const 1056 i32.const 13 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/do.debug.wat b/tests/compiler/do.debug.wat index cb3313e590..d9dc2e59fb 100644 --- a/tests/compiler/do.debug.wat +++ b/tests/compiler/do.debug.wat @@ -5,11 +5,12 @@ (type $3 (func (param i32))) (type $4 (func (result i32))) (type $5 (func (param i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $do/ran (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -632,7 +634,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3011,55 +3013,6 @@ end call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $do/Ref - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $do/Ref $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:do ) @@ -3076,6 +3029,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $do/Ref#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3142,4 +3127,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $do/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $do/Ref $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/do.release.wat b/tests/compiler/do.release.wat index 09a5e6e6a9..ac216a0fed 100644 --- a/tests/compiler/do.release.wat +++ b/tests/compiler/do.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $9 (i32.const 1472) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1496 + i32.lt_s + if + i32.const 34288 + i32.const 34336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/step (result i32) (local $0 i32) (local $1 i32) @@ -332,7 +367,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$125 + block $__inlined_func$~lib/rt/itcms/Object#unlink$126 local.get $1 i32.load offset=4 i32.const -4 @@ -356,7 +391,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$125 + br $__inlined_func$~lib/rt/itcms/Object#unlink$126 end local.get $1 i32.load offset=8 @@ -399,7 +434,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/duplicate-fields.debug.wat b/tests/compiler/duplicate-fields.debug.wat index 752c8deba5..ae36cf06b0 100644 --- a/tests/compiler/duplicate-fields.debug.wat +++ b/tests/compiler/duplicate-fields.debug.wat @@ -8,7 +8,8 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -232,7 +234,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2380,113 +2382,6 @@ local.get $pub i32.store offset=4 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $duplicate-fields/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $duplicate-fields/raz - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $duplicate-fields/A2~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $duplicate-fields/B2~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $duplicate-fields/A2~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $duplicate-fields/A3 - block $duplicate-fields/B3 - block $duplicate-fields/B2 - block $duplicate-fields/Foo - block $duplicate-fields/A2 - block $duplicate-fields/B - block $duplicate-fields/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $duplicate-fields/A $duplicate-fields/B $duplicate-fields/A2 $duplicate-fields/Foo $duplicate-fields/B2 $duplicate-fields/B3 $duplicate-fields/A3 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - local.get $0 - local.get $1 - call $duplicate-fields/A2~visit - return - end - return - end - local.get $0 - local.get $1 - call $duplicate-fields/B2~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:duplicate-fields ) @@ -2503,6 +2398,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $duplicate-fields/A#constructor (param $this i32) (param $bar i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -3010,4 +2937,111 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $duplicate-fields/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $duplicate-fields/raz + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $duplicate-fields/A2~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $duplicate-fields/B2~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $duplicate-fields/A2~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $duplicate-fields/A3 + block $duplicate-fields/B3 + block $duplicate-fields/B2 + block $duplicate-fields/Foo + block $duplicate-fields/A2 + block $duplicate-fields/B + block $duplicate-fields/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $duplicate-fields/A $duplicate-fields/B $duplicate-fields/A2 $duplicate-fields/Foo $duplicate-fields/B2 $duplicate-fields/B3 $duplicate-fields/A3 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $duplicate-fields/A2~visit + return + end + return + end + local.get $0 + local.get $1 + call $duplicate-fields/B2~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/duplicate-fields.release.wat b/tests/compiler/duplicate-fields.release.wat index 93f8386acc..9c310df4b7 100644 --- a/tests/compiler/duplicate-fields.release.wat +++ b/tests/compiler/duplicate-fields.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -36,6 +36,41 @@ (data $9 (i32.const 1504) "\0b\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1552 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -844,7 +879,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$139 + block $__inlined_func$~lib/rt/itcms/Object#unlink$140 local.get $0 i32.load offset=4 i32.const -4 @@ -868,7 +903,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$139 + br $__inlined_func$~lib/rt/itcms/Object#unlink$140 end local.get $0 i32.load offset=8 @@ -911,7 +946,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/duplicate-function-in-scope.json b/tests/compiler/duplicate-function-in-scope.json index be8607a6b1..05cb143081 100644 --- a/tests/compiler/duplicate-function-in-scope.json +++ b/tests/compiler/duplicate-function-in-scope.json @@ -2,7 +2,6 @@ "asc_flags": [], "stderr": [ "EOF", - "TS2300: Duplicate identifier 'inner'.", - "TS2393: Duplicate function implementation." + "TS2300: Duplicate identifier 'inner'." ] } diff --git a/tests/compiler/empty-exportruntime.debug.wat b/tests/compiler/empty-exportruntime.debug.wat index e95efa75fe..e65750efae 100644 --- a/tests/compiler/empty-exportruntime.debug.wat +++ b/tests/compiler/empty-exportruntime.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -231,7 +233,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2365,6 +2367,70 @@ i32.const 0 drop ) + (func $~start + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33360 + i32.const 33408 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 224 @@ -2417,23 +2483,4 @@ end unreachable ) - (func $~start - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base - i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 144 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 176 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 320 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - ) ) diff --git a/tests/compiler/empty-exportruntime.release.wat b/tests/compiler/empty-exportruntime.release.wat index 422cd0bc5a..ac2b09a045 100644 --- a/tests/compiler/empty-exportruntime.release.wat +++ b/tests/compiler/empty-exportruntime.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -19,6 +19,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1568)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34356)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") @@ -42,6 +43,41 @@ (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1588 + i32.lt_s + if + i32.const 34384 + i32.const 34432 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -144,7 +180,7 @@ i32.and i32.eq if - i32.const 34356 + global.get $~lib/memory/__stack_pointer local.set $0 loop $while-continue|0 local.get $0 @@ -1207,7 +1243,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/empty-new.debug.wat b/tests/compiler/empty-new.debug.wat index 424bdfc617..c68f28c35d 100644 --- a/tests/compiler/empty-new.debug.wat +++ b/tests/compiler/empty-new.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -224,7 +226,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2267,6 +2269,54 @@ call $~lib/rt/itcms/__new drop ) + (func $~start + call $start:empty-new + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33232 + i32.const 33280 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 224 @@ -2313,7 +2363,4 @@ end unreachable ) - (func $~start - call $start:empty-new - ) ) diff --git a/tests/compiler/empty-new.release.wat b/tests/compiler/empty-new.release.wat index f4381da8f1..4f133eebd1 100644 --- a/tests/compiler/empty-new.release.wat +++ b/tests/compiler/empty-new.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) (type $4 (func (param i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -17,6 +17,7 @@ (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34228)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") @@ -31,6 +32,41 @@ (data $8 (i32.const 1440) "\04\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1460 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -69,7 +105,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$107 + block $__inlined_func$~lib/rt/itcms/Object#unlink$108 local.get $1 i32.load offset=4 i32.const -4 @@ -93,7 +129,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$107 + br $__inlined_func$~lib/rt/itcms/Object#unlink$108 end local.get $1 i32.load offset=8 @@ -136,7 +172,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1009,7 +1045,7 @@ i32.and i32.eq if - i32.const 34228 + global.get $~lib/memory/__stack_pointer local.set $0 loop $while-continue|0 local.get $0 diff --git a/tests/compiler/enum-to-string.debug.wat b/tests/compiler/enum-to-string.debug.wat index 0f60906aa8..a5abb3ac58 100644 --- a/tests/compiler/enum-to-string.debug.wat +++ b/tests/compiler/enum-to-string.debug.wat @@ -1,17 +1,19 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $enum-to-string/Enum.E0 i32 (i32.const 0)) (global $enum-to-string/Enum.E1 i32 (i32.const 1)) (global $enum-to-string/Enum.E2 i32 (i32.const 2)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $enum-to-string/v (mut i32) (i32.const 0)) (global $enum-to-string/EnumWithInit.E0 i32 (i32.const 1)) (global $enum-to-string/EnumWithInit.E1 i32 (i32.const 2)) @@ -359,6 +361,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $start:enum-to-string (local $0 i32) global.get $~lib/memory/__stack_pointer diff --git a/tests/compiler/enum-to-string.release.wat b/tests/compiler/enum-to-string.release.wat index 9e1363df6d..5e33858074 100644 --- a/tests/compiler/enum-to-string.release.wat +++ b/tests/compiler/enum-to-string.release.wat @@ -1,8 +1,9 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) (type $2 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34060)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -21,6 +22,40 @@ (data $6.1 (i32.const 1272) "\02\00\00\00\06\00\00\00C\00E\000") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1292 + i32.lt_s + if + i32.const 34080 + i32.const 34128 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -37,7 +72,6 @@ i32.const 34080 i32.const 34128 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -198,7 +232,6 @@ i32.const 34080 i32.const 34128 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -216,7 +249,6 @@ i32.const 0 i32.const 1152 i32.const 7 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -231,7 +263,6 @@ i32.const 0 i32.const 1152 i32.const 8 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -246,7 +277,6 @@ i32.const 0 i32.const 1152 i32.const 9 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -261,7 +291,6 @@ i32.const 0 i32.const 1152 i32.const 12 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -276,7 +305,6 @@ i32.const 0 i32.const 1152 i32.const 21 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -291,7 +319,6 @@ i32.const 0 i32.const 1152 i32.const 22 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -306,7 +333,6 @@ i32.const 0 i32.const 1152 i32.const 23 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -321,7 +347,6 @@ i32.const 0 i32.const 1152 i32.const 31 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -336,7 +361,6 @@ i32.const 0 i32.const 1152 i32.const 32 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -351,7 +375,6 @@ i32.const 0 i32.const 1152 i32.const 33 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -366,7 +389,6 @@ i32.const 0 i32.const 1152 i32.const 41 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -381,7 +403,6 @@ i32.const 0 i32.const 1152 i32.const 42 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -396,7 +417,6 @@ i32.const 0 i32.const 1152 i32.const 43 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/exceptions.debug.wat b/tests/compiler/exceptions.debug.wat new file mode 100644 index 0000000000..ab2c161f15 --- /dev/null +++ b/tests/compiler/exceptions.debug.wat @@ -0,0 +1,7323 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func)) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 i64 i32))) + (type $10 (func (param i64 i32) (result i32))) + (type $11 (func (param i32 i64 i32 i32))) + (type $12 (func (param i32 i32 i64) (result i32))) + (type $13 (func (param i32 i32 i32 i32 i32) (result i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $exceptions/finallyRan (mut i32) (i32.const 0)) + (global $exceptions/returnInCatchFinallyRan (mut i32) (i32.const 0)) + (global $exceptions/tryCatchFinallyRan (mut i32) (i32.const 0)) + (global $exceptions/tryCatchFinallyResult (mut i32) (i32.const 0)) + (global $exceptions/finallyWithExceptionRan (mut i32) (i32.const 0)) + (global $exceptions/finallyNormalRan (mut i32) (i32.const 0)) + (global $exceptions/Resource.instances (mut i32) (i32.const 0)) + (global $exceptions/Resource.disposed (mut i32) (i32.const 0)) + (global $exceptions/calc (mut i32) (i32.const 0)) + (global $exceptions/outer (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $exceptions/rethrowFinallyRan (mut i32) (i32.const 0)) + (global $exceptions/sm (mut i32) (i32.const 0)) + (global $exceptions/deepNestingOrder (mut i32) (i32.const 192)) + (global $exceptions/counter (mut i32) (i32.const 0)) + (global $exceptions/multiReturnFinallyCount (mut i32) (i32.const 0)) + (global $exceptions/finallyReturnSuppressedExceptionRan (mut i32) (i32.const 0)) + (global $~lib/builtins/usize.MAX_VALUE i32 (i32.const -1)) + (global $~lib/rt/__rtti_base i32 (i32.const 3952)) + (global $~lib/memory/__data_end i32 (i32.const 4012)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36780)) + (global $~lib/memory/__heap_base i32 (i32.const 36780)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 80) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 108) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00a\00b\00o\00r\00t\00\00\00") + (data $3 (i32.const 140) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00 \00i\00n\00 \00\00\00\00\00") + (data $4 (i32.const 172) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 204) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 236) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00R\00a\00n\00g\00e\00E\00r\00r\00o\00r\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 284) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 352) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 380) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 444) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 604) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data $13 (i32.const 1004) "\1c\04\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $14 (i32.const 2060) "\\\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") + (data $15 (i32.const 2160) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $16 (i32.const 2188) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $17 (i32.const 2252) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00E\00r\00r\00o\00r\00\00\00") + (data $18 (i32.const 2284) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00o\00o\00p\00s\00\00\00\00\00") + (data $19 (i32.const 2316) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00e\00x\00c\00e\00p\00t\00i\00o\00n\00s\00.\00t\00s\00\00\00") + (data $20 (i32.const 2364) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00m\00s\00g\00\00\00\00\00\00\00") + (data $21 (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00i\00n\00n\00e\00r\00\00\00") + (data $22 (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00o\00u\00t\00e\00r\00\00\00") + (data $23 (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\n\00\00\00e\00r\00r\00o\00r\00\00\00") + (data $24 (i32.const 2492) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00w\00i\00l\00l\00 \00p\00r\00o\00p\00a\00g\00a\00t\00e\00") + (data $25 (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0c\00\00\00c\00u\00s\00t\00o\00m\00") + (data $26 (i32.const 2572) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00w\00o\00r\00k\00 \00f\00a\00i\00l\00e\00d\00\00\00\00\00\00\00") + (data $27 (i32.const 2620) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00d\00i\00v\00i\00s\00i\00o\00n\00 \00b\00y\00 \00z\00e\00r\00o\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $28 (i32.const 2684) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00i\00n\00n\00e\00r\00 \00e\00r\00r\00o\00r\00\00\00\00\00\00\00") + (data $29 (i32.const 2732) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00w\00r\00a\00p\00p\00e\00d\00 \00e\00r\00r\00o\00r\00\00\00") + (data $30 (i32.const 2780) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $31 (i32.const 2828) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\18\00\00\00s\00u\00m\00 \00e\00x\00c\00e\00e\00d\00e\00d\00\00\00\00\00") + (data $32 (i32.const 2876) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\10\00\00\00o\00r\00i\00g\00i\00n\00a\00l\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $33 (i32.const 2924) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00r\00e\00t\00h\00r\00o\00w\00n\00:\00 \00\00\00\00\00\00\00\00\00") + (data $34 (i32.const 2972) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00i\00n\00v\00a\00l\00i\00d\00 \00s\00t\00a\00t\00e\00\00\00") + (data $35 (i32.const 3020) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00t\001\00,\00\00\00\00\00\00\00") + (data $36 (i32.const 3052) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00t\002\00,\00\00\00\00\00\00\00") + (data $37 (i32.const 3084) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00t\003\00,\00\00\00\00\00\00\00") + (data $38 (i32.const 3116) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00d\00e\00e\00p\00\00\00\00\00") + (data $39 (i32.const 3148) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00c\003\00,\00\00\00\00\00\00\00") + (data $40 (i32.const 3180) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0e\00\00\00r\00e\00t\00h\00r\00o\00w\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $41 (i32.const 3228) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00f\003\00,\00\00\00\00\00\00\00") + (data $42 (i32.const 3260) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00c\002\00,\00\00\00\00\00\00\00") + (data $43 (i32.const 3292) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00f\002\00,\00\00\00\00\00\00\00") + (data $44 (i32.const 3324) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00c\001\00,\00\00\00\00\00\00\00") + (data $45 (i32.const 3356) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00f\001\00,\00\00\00\00\00\00\00") + (data $46 (i32.const 3388) "L\00\00\00\00\00\00\00\00\00\00\00\02\00\00\000\00\00\00t\001\00,\00t\002\00,\00t\003\00,\00c\003\00,\00f\003\00,\00c\002\00,\00f\002\00,\00f\001\00,\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $47 (i32.const 3468) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00m\00a\00x\00 \00r\00e\00a\00c\00h\00e\00d\00\00\00\00\00\00\00") + (data $48 (i32.const 3516) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00z\00e\00r\00o\00\00\00\00\00") + (data $49 (i32.const 3548) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00t\00e\00s\00t\00\00\00\00\00") + (data $50 (i32.const 3580) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00s\00h\00o\00u\00l\00d\00 \00b\00e\00 \00s\00u\00p\00p\00r\00e\00s\00s\00e\00d\00\00\00\00\00") + (data $51 (i32.const 3644) "L\00\00\00\00\00\00\00\00\00\00\00\02\00\00\000\00\00\00t\00h\00i\00s\00 \00s\00h\00o\00u\00l\00d\00 \00b\00e\00 \00c\00a\00t\00c\00h\00a\00b\00l\00e\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $52 (i32.const 3724) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00a\00b\00o\00r\00t\00 \00f\00r\00o\00m\00 \00f\00u\00n\00c\00t\00i\00o\00n\00\00\00\00\00\00\00") + (data $53 (i32.const 3788) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\12\00\00\00t\00y\00p\00e\00 \00t\00e\00s\00t\00\00\00\00\00\00\00\00\00\00\00") + (data $54 (i32.const 3836) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00c\00u\00s\00t\00o\00m\00 \00e\00r\00r\00o\00r\00 \002\00") + (data $55 (i32.const 3884) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00i\00n\00v\00a\00l\00i\00d\00 \00d\00o\00w\00n\00c\00a\00s\00t\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $56 (i32.const 3952) "\0e\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\02\t\00\00 \00\00\00 \00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (tag $error (type $4) (param i32)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/common/OBJECT#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/string/String#get:length (param $this i32) (result i32) + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.const 1 + i32.shr_u + return + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 304 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 304 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 0 + i32.const 400 + call $~lib/error/Error#constructor + throw $error + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 304 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 304 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/error/Error#set:name (param $this i32) (param $name i32) + local.get $this + local.get $name + i32.store + local.get $this + local.get $name + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/util/number/decimalCount32 (param $value i32) (result i32) + local.get $value + i32.const 100000 + i32.lt_u + if + local.get $value + i32.const 100 + i32.lt_u + if + i32.const 1 + local.get $value + i32.const 10 + i32.ge_u + i32.add + return + else + i32.const 3 + local.get $value + i32.const 10000 + i32.ge_u + i32.add + local.get $value + i32.const 1000 + i32.ge_u + i32.add + return + end + unreachable + else + local.get $value + i32.const 10000000 + i32.lt_u + if + i32.const 6 + local.get $value + i32.const 1000000 + i32.ge_u + i32.add + return + else + i32.const 8 + local.get $value + i32.const 1000000000 + i32.ge_u + i32.add + local.get $value + i32.const 100000000 + i32.ge_u + i32.add + return + end + unreachable + end + unreachable + ) + (func $~lib/util/number/utoa32_dec_lut (param $buffer i32) (param $num i32) (param $offset i32) + (local $t i32) + (local $r i32) + (local $d1 i32) + (local $d2 i32) + (local $digits1 i64) + (local $digits2 i64) + (local $t|9 i32) + (local $d1|10 i32) + (local $digits i32) + (local $digits|12 i32) + (local $digit i32) + loop $while-continue|0 + local.get $num + i32.const 10000 + i32.ge_u + if + local.get $num + i32.const 10000 + i32.div_u + local.set $t + local.get $num + i32.const 10000 + i32.rem_u + local.set $r + local.get $t + local.set $num + local.get $r + i32.const 100 + i32.div_u + local.set $d1 + local.get $r + i32.const 100 + i32.rem_u + local.set $d2 + i32.const 604 + local.get $d1 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.set $digits1 + i32.const 604 + local.get $d2 + i32.const 2 + i32.shl + i32.add + i64.load32_u + local.set $digits2 + local.get $offset + i32.const 4 + i32.sub + local.set $offset + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $digits1 + local.get $digits2 + i64.const 32 + i64.shl + i64.or + i64.store + br $while-continue|0 + end + end + local.get $num + i32.const 100 + i32.ge_u + if + local.get $num + i32.const 100 + i32.div_u + local.set $t|9 + local.get $num + i32.const 100 + i32.rem_u + local.set $d1|10 + local.get $t|9 + local.set $num + local.get $offset + i32.const 2 + i32.sub + local.set $offset + i32.const 604 + local.get $d1|10 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $digits + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $digits + i32.store + end + local.get $num + i32.const 10 + i32.ge_u + if + local.get $offset + i32.const 2 + i32.sub + local.set $offset + i32.const 604 + local.get $num + i32.const 2 + i32.shl + i32.add + i32.load + local.set $digits|12 + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $digits|12 + i32.store + else + local.get $offset + i32.const 1 + i32.sub + local.set $offset + i32.const 48 + local.get $num + i32.add + local.set $digit + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $digit + i32.store16 + end + ) + (func $~lib/util/number/utoa_hex_lut (param $buffer i32) (param $num i64) (param $offset i32) + loop $while-continue|0 + local.get $offset + i32.const 2 + i32.ge_u + if + local.get $offset + i32.const 2 + i32.sub + local.set $offset + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + i32.const 1024 + local.get $num + i32.wrap_i64 + i32.const 255 + i32.and + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $num + i64.const 8 + i64.shr_u + local.set $num + br $while-continue|0 + end + end + local.get $offset + i32.const 1 + i32.and + if + local.get $buffer + i32.const 1024 + local.get $num + i32.wrap_i64 + i32.const 6 + i32.shl + i32.add + i32.load16_u + i32.store16 + end + ) + (func $~lib/util/number/ulog_base (param $num i64) (param $base i32) (result i32) + (local $value i32) + (local $b64 i64) + (local $b i64) + (local $e i32) + block $~lib/util/number/isPowerOf2|inlined.0 (result i32) + local.get $base + local.set $value + local.get $value + i32.popcnt + i32.const 1 + i32.eq + br $~lib/util/number/isPowerOf2|inlined.0 + end + if + i32.const 63 + local.get $num + i64.clz + i32.wrap_i64 + i32.sub + i32.const 31 + local.get $base + i32.clz + i32.sub + i32.div_u + i32.const 1 + i32.add + return + end + local.get $base + i64.extend_i32_s + local.set $b64 + local.get $b64 + local.set $b + i32.const 1 + local.set $e + loop $while-continue|0 + local.get $num + local.get $b + i64.ge_u + if + local.get $num + local.get $b + i64.div_u + local.set $num + local.get $b + local.get $b + i64.mul + local.set $b + local.get $e + i32.const 1 + i32.shl + local.set $e + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $num + i64.const 1 + i64.ge_u + if + local.get $num + local.get $b64 + i64.div_u + local.set $num + local.get $e + i32.const 1 + i32.add + local.set $e + br $while-continue|1 + end + end + local.get $e + i32.const 1 + i32.sub + return + ) + (func $~lib/util/number/utoa64_any_core (param $buffer i32) (param $num i64) (param $offset i32) (param $radix i32) + (local $base i64) + (local $shift i64) + (local $mask i64) + (local $q i64) + local.get $radix + i64.extend_i32_s + local.set $base + local.get $radix + local.get $radix + i32.const 1 + i32.sub + i32.and + i32.const 0 + i32.eq + if + local.get $radix + i32.ctz + i32.const 7 + i32.and + i64.extend_i32_s + local.set $shift + local.get $base + i64.const 1 + i64.sub + local.set $mask + loop $do-loop|0 + local.get $offset + i32.const 1 + i32.sub + local.set $offset + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + i32.const 2080 + local.get $num + local.get $mask + i64.and + i32.wrap_i64 + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.store16 + local.get $num + local.get $shift + i64.shr_u + local.set $num + local.get $num + i64.const 0 + i64.ne + br_if $do-loop|0 + end + else + loop $do-loop|1 + local.get $offset + i32.const 1 + i32.sub + local.set $offset + local.get $num + local.get $base + i64.div_u + local.set $q + local.get $buffer + local.get $offset + i32.const 1 + i32.shl + i32.add + i32.const 2080 + local.get $num + local.get $q + local.get $base + i64.mul + i64.sub + i32.wrap_i64 + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.store16 + local.get $q + local.set $num + local.get $num + i64.const 0 + i64.ne + br_if $do-loop|1 + end + end + ) + (func $~lib/number/U32#toString (param $this i32) (param $radix i32) (result i32) + local.get $this + local.get $radix + call $~lib/util/number/utoa32 + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 304 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 304 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 0 + i32.const 32 + call $~lib/error/Error#constructor + throw $error + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 2208 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 0 + i32.const 32 + call $~lib/error/Error#constructor + throw $error + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $~lib/error/Error#set:message (param $this i32) (param $message i32) + local.get $this + local.get $message + i32.store offset=8 + local.get $this + local.get $message + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/error/Error#set:stack (param $this i32) (param $stack i32) + local.get $this + local.get $stack + i32.store offset=4 + local.get $this + local.get $stack + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $exceptions/testTryCatch (result i32) + (local $e i32) + try $try|0 + i32.const 0 + i32.const 2304 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e + i32.const 1 + return + end + unreachable + ) + (func $~lib/error/Error#get:message (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/util/string/compareImpl (param $str1 i32) (param $index1 i32) (param $str2 i32) (param $index2 i32) (param $len i32) (result i32) + (local $ptr1 i32) + (local $ptr2 i32) + (local $7 i32) + (local $a i32) + (local $b i32) + local.get $str1 + local.get $index1 + i32.const 1 + i32.shl + i32.add + local.set $ptr1 + local.get $str2 + local.get $index2 + i32.const 1 + i32.shl + i32.add + local.set $ptr2 + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $len + i32.const 4 + i32.ge_u + if (result i32) + local.get $ptr1 + i32.const 7 + i32.and + local.get $ptr2 + i32.const 7 + i32.and + i32.or + i32.eqz + else + i32.const 0 + end + if + block $do-break|0 + loop $do-loop|0 + local.get $ptr1 + i64.load + local.get $ptr2 + i64.load + i64.ne + if + br $do-break|0 + end + local.get $ptr1 + i32.const 8 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 8 + i32.add + local.set $ptr2 + local.get $len + i32.const 4 + i32.sub + local.set $len + local.get $len + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $len + local.tee $7 + i32.const 1 + i32.sub + local.set $len + local.get $7 + if + local.get $ptr1 + i32.load16_u + local.set $a + local.get $ptr2 + i32.load16_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + return + end + local.get $ptr1 + i32.const 2 + i32.add + local.set $ptr1 + local.get $ptr2 + i32.const 2 + i32.add + local.set $ptr2 + br $while-continue|1 + end + end + i32.const 0 + return + ) + (func $exceptions/testNoThrow (result i32) + (local $e i32) + try $try|0 + i32.const 1 + return + catch $error + + local.set $e + i32.const 2 + return + end + unreachable + ) + (func $exceptions/testFinally + (local $0 i32) + try $try_finally|0 + catch_all + i32.const 1 + global.set $exceptions/finallyRan + rethrow $try_finally|0 + end + i32.const 1 + global.set $exceptions/finallyRan + local.get $0 + i32.const 1 + i32.eq + if + return + end + ) + (func $exceptions/testNested (result i32) + (local $e i32) + (local $e|1 i32) + try $try|0 + try $try|1 + i32.const 0 + i32.const 2416 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e + i32.const 0 + i32.const 2448 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch $error + + local.set $e|1 + i32.const 42 + return + end + unreachable + ) + (func $exceptions/testReturnInCatchFinally (result i32) + (local $e i32) + (local $1 i32) + (local $2 i32) + (local $e|3 i32) + block $finally_dispatch|0 + try $try_finally|0 + try $try|1 + i32.const 0 + i32.const 2480 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e|3 + i32.const 10 + local.set $2 + i32.const 1 + local.set $1 + br $finally_dispatch|0 + end + unreachable + catch_all + i32.const 1 + global.set $exceptions/returnInCatchFinallyRan + rethrow $try_finally|0 + end + unreachable + end + i32.const 1 + global.set $exceptions/returnInCatchFinallyRan + local.get $1 + i32.const 1 + i32.eq + if + local.get $2 + return + end + unreachable + ) + (func $exceptions/testTryCatchFinally + (local $e i32) + (local $1 i32) + (local $e|2 i32) + try $try_finally|0 + try $try|1 + i32.const 0 + i32.const 2480 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e|2 + i32.const 10 + global.set $exceptions/tryCatchFinallyResult + end + catch_all + i32.const 1 + global.set $exceptions/tryCatchFinallyRan + rethrow $try_finally|0 + end + i32.const 1 + global.set $exceptions/tryCatchFinallyRan + local.get $1 + i32.const 1 + i32.eq + if + return + end + ) + (func $exceptions/innerThrow + (local $0 i32) + try $try_finally|0 + i32.const 0 + i32.const 2512 + call $~lib/error/Error#constructor + throw $error + catch_all + i32.const 1 + global.set $exceptions/finallyWithExceptionRan + rethrow $try_finally|0 + end + unreachable + ) + (func $exceptions/testFinallyWithException (result i32) + (local $e i32) + try $try|0 + call $exceptions/innerThrow + catch $error + + local.set $e + global.get $exceptions/finallyWithExceptionRan + if (result i32) + i32.const 1 + else + i32.const 0 + end + return + end + i32.const 0 + return + ) + (func $exceptions/testFinallyNormalCompletion (result i32) + (local $0 i32) + (local $1 i32) + try $try_finally|0 + catch_all + i32.const 1 + global.set $exceptions/finallyNormalRan + rethrow $try_finally|0 + end + i32.const 1 + global.set $exceptions/finallyNormalRan + local.get $0 + i32.const 1 + i32.eq + if + local.get $1 + return + end + global.get $exceptions/finallyNormalRan + if (result i32) + i32.const 1 + else + i32.const 0 + end + return + ) + (func $exceptions/CustomError#set:code (param $this i32) (param $code i32) + local.get $this + local.get $code + i32.store offset=12 + ) + (func $exceptions/testCustomError (result i32) + (local $e i32) + try $try|0 + i32.const 0 + i32.const 2560 + i32.const 42 + call $exceptions/CustomError#constructor + throw $error + catch $error + + local.set $e + i32.const 1 + return + end + unreachable + ) + (func $exceptions/Resource#set:id (param $this i32) (param $id i32) + local.get $this + local.get $id + i32.store + ) + (func $exceptions/Resource#doWork (param $this i32) + ) + (func $exceptions/Resource#dispose (param $this i32) + global.get $exceptions/Resource.disposed + i32.const 1 + i32.add + global.set $exceptions/Resource.disposed + ) + (func $exceptions/Resource#doWorkThatThrows (param $this i32) + i32.const 0 + i32.const 2592 + call $~lib/error/Error#constructor + throw $error + ) + (func $exceptions/Calculator#set:value (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store + ) + (func $exceptions/Calculator#get:value (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $exceptions/Outer#set:inner (param $this i32) (param $inner i32) + local.get $this + local.get $inner + i32.store + local.get $this + local.get $inner + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $exceptions/Outer#get:inner (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $exceptions/Inner#riskyOperation (param $this i32) (result i32) + (local $e i32) + try $try|0 + i32.const 0 + i32.const 2704 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e + i32.const 0 + i32.const 2752 + call $~lib/error/Error#constructor + throw $error + end + unreachable + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $exceptions/testRethrowWithFinally (result i32) + (local $e i32) + i32.const 0 + global.set $exceptions/rethrowFinallyRan + try $try|0 + call $exceptions/innerRethrow + catch $error + + local.set $e + global.get $exceptions/rethrowFinallyRan + if (result i32) + i32.const 1 + else + i32.const 0 + end + return + end + i32.const 0 + return + ) + (func $exceptions/StateMachine#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store + ) + (func $exceptions/StateMachine#set:errorState (param $this i32) (param $errorState i32) + local.get $this + local.get $errorState + i32.store8 offset=4 + ) + (func $exceptions/StateMachine#get:state (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $exceptions/StateMachine#get:errorState (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $exceptions/Counter#set:count (param $this i32) (param $count i32) + local.get $this + local.get $count + i32.store + ) + (func $exceptions/Counter#get:count (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $exceptions/testReturnFromTry (result i32) + (local $e i32) + (local $1 i32) + (local $2 i32) + (local $e|3 i32) + block $finally_dispatch|0 + try $try_finally|0 + try $try|1 + i32.const 42 + local.set $2 + i32.const 1 + local.set $1 + br $finally_dispatch|0 + catch $error + + local.set $e|3 + i32.const -1 + local.set $2 + i32.const 1 + local.set $1 + br $finally_dispatch|0 + end + unreachable + catch_all + rethrow $try_finally|0 + end + unreachable + end + local.get $1 + i32.const 1 + i32.eq + if + local.get $2 + return + end + unreachable + ) + (func $exceptions/testMultipleReturnsWithFinally (param $x i32) (result i32) + (local $e i32) + (local $2 i32) + (local $3 i32) + (local $e|4 i32) + block $finally_dispatch|0 + try $try_finally|0 + try $try|1 + local.get $x + i32.const 0 + i32.lt_s + if + i32.const -1 + local.set $3 + i32.const 1 + local.set $2 + br $finally_dispatch|0 + end + local.get $x + i32.const 0 + i32.eq + if + i32.const 0 + i32.const 3536 + call $~lib/error/Error#constructor + throw $error + end + local.get $x + i32.const 100 + i32.gt_s + if + i32.const 100 + local.set $3 + i32.const 1 + local.set $2 + br $finally_dispatch|0 + end + local.get $x + local.set $3 + i32.const 1 + local.set $2 + br $finally_dispatch|0 + catch $error + + local.set $e|4 + i32.const 0 + local.set $3 + i32.const 1 + local.set $2 + br $finally_dispatch|0 + end + unreachable + catch_all + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.add + global.set $exceptions/multiReturnFinallyCount + rethrow $try_finally|0 + end + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.add + global.set $exceptions/multiReturnFinallyCount + local.get $2 + i32.const 1 + i32.eq + if + local.get $3 + return + end + unreachable + ) + (func $exceptions/testReturnInFinally (result i32) + (local $0 i32) + (local $1 i32) + block $finally_dispatch|0 + try $try_finally|0 + i32.const 1 + local.set $1 + i32.const 1 + local.set $0 + br $finally_dispatch|0 + catch_all + i32.const 2 + return + end + unreachable + end + i32.const 2 + return + ) + (func $exceptions/testReturnInFinallyOverridesCatch (result i32) + (local $e i32) + (local $1 i32) + (local $2 i32) + (local $e|3 i32) + block $finally_dispatch|0 + try $try_finally|0 + try $try|1 + i32.const 0 + i32.const 3568 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e|3 + i32.const 1 + local.set $2 + i32.const 1 + local.set $1 + br $finally_dispatch|0 + end + unreachable + catch_all + i32.const 2 + return + end + unreachable + end + i32.const 2 + return + ) + (func $exceptions/testReturnInFinallySuppressesException (result i32) + (local $0 i32) + (local $1 i32) + try $try_finally|0 + i32.const 0 + i32.const 3600 + call $~lib/error/Error#constructor + throw $error + catch_all + i32.const 1 + global.set $exceptions/finallyReturnSuppressedExceptionRan + i32.const 42 + return + end + unreachable + ) + (func $exceptions/functionThatAborts + i32.const 3744 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/builtins/abort + ) + (func $exceptions/CustomError#get:code (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~instanceof|exceptions/CustomError (param $0 i32) (result i32) + (local $1 i32) + block $is_instance + local.get $0 + i32.const 8 + i32.sub + i32.load + local.set $1 + local.get $1 + i32.const 6 + i32.eq + br_if $is_instance + i32.const 0 + return + end + i32.const 1 + ) + (func $~start + call $start:exceptions + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + unreachable + end + ) + (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) + (local $thisSize i32) + (local $otherSize i32) + (local $outSize i32) + (local $out i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $thisSize + local.get $other + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + local.set $otherSize + local.get $thisSize + local.get $otherSize + i32.add + local.set $outSize + local.get $outSize + i32.const 0 + i32.eq + if + i32.const 192 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + end + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $thisSize + memory.copy + local.get $out + local.get $thisSize + i32.add + local.get $other + local.get $otherSize + memory.copy + local.get $out + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + return + ) + (func $~lib/string/String.__concat (param $left i32) (param $right i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $right + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#concat + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/error/RangeError#constructor (param $this i32) (param $message i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $message + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/error/Error#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 256 + call $~lib/error/Error#set:name + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $fullMessage i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + i32.const 1 + drop + global.get $~lib/memory/__stack_pointer + local.get $message + if (result i32) + local.get $message + else + i32.const 128 + end + local.tee $fullMessage + i32.store + local.get $fileName + if + global.get $~lib/memory/__stack_pointer + local.get $fullMessage + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 160 + local.get $fileName + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=36 + local.get $5 + call $~lib/string/String.__concat + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=32 + local.get $5 + i32.const 224 + call $~lib/string/String.__concat + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=24 + local.get $5 + local.get $lineNumber + i32.const 10 + call $~lib/number/U32#toString + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=28 + local.get $5 + call $~lib/string/String.__concat + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=20 + local.get $5 + i32.const 224 + call $~lib/string/String.__concat + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=12 + local.get $5 + local.get $columnNumber + i32.const 10 + call $~lib/number/U32#toString + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=16 + local.get $5 + call $~lib/string/String.__concat + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=8 + local.get $5 + call $~lib/string/String.__concat + local.tee $fullMessage + i32.store + end + i32.const 0 + local.get $fullMessage + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/error/Error#constructor + throw $error + ) + (func $~lib/error/Error#constructor (param $this i32) (param $message i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $message + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/error/Error#set:message + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2272 + call $~lib/error/Error#set:name + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 192 + call $~lib/error/Error#set:stack + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $exceptions/testCatchVar (result i32) + (local $e i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try $try|0 + i32.const 0 + i32.const 2384 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e + local.get $e + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/error/Error#get:message + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + end + unreachable + ) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $exceptions/CustomError#constructor (param $this i32) (param $message i32) (param $code i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $code + call $exceptions/CustomError#set:code + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $message + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $~lib/error/Error#constructor + local.tee $this + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $exceptions/Resource#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/Resource#set:id + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + global.get $exceptions/Resource.instances + i32.const 1 + i32.add + global.set $exceptions/Resource.instances + global.get $exceptions/Resource.instances + call $exceptions/Resource#set:id + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/testResourceCleanup (result i32) + (local $r i32) + (local $result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $exceptions/Resource#constructor + local.tee $r + i32.store + i32.const 0 + local.set $result + try $try_finally|0 + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#doWork + i32.const 1 + local.set $result + catch_all + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#dispose + rethrow $try_finally|0 + end + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#dispose + local.get $2 + i32.const 1 + i32.eq + if + local.get $3 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + local.get $result + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $exceptions/testResourceCleanupWithException (result i32) + (local $r i32) + (local $1 i32) + (local $2 i32) + (local $e i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + global.set $exceptions/Resource.disposed + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $exceptions/Resource#constructor + local.tee $r + i32.store + try $try|0 + try $try_finally|1 + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#doWorkThatThrows + catch_all + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#dispose + rethrow $try_finally|1 + end + local.get $r + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $exceptions/Resource#dispose + local.get $1 + i32.const 1 + i32.eq + if + local.get $2 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + catch $error + + local.set $e + global.get $exceptions/Resource.disposed + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + i32.const 0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $exceptions/Calculator#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/Calculator#set:value + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/Calculator#divide (param $this i32) (param $a i32) (param $b i32) (result i32) + (local $e i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try $try|0 + local.get $b + i32.const 0 + i32.eq + if + i32.const 0 + i32.const 2640 + call $~lib/error/Error#constructor + throw $error + end + local.get $a + local.get $b + i32.div_s + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + catch $error + + local.set $e + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + i32.const -1 + call $exceptions/Calculator#set:value + i32.const 0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + unreachable + ) + (func $exceptions/Calculator#safeDivide (param $this i32) (param $a i32) (param $b i32) (result i32) + (local $e i32) + (local $4 i32) + (local $5 i32) + (local $e|6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $finally_dispatch|0 + try $try_finally|0 + try $try|1 + local.get $b + i32.const 0 + i32.eq + if + i32.const 0 + i32.const 2640 + call $~lib/error/Error#constructor + throw $error + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $a + local.get $b + i32.div_s + call $exceptions/Calculator#set:value + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $exceptions/Calculator#get:value + local.set $5 + i32.const 1 + local.set $4 + br $finally_dispatch|0 + catch $error + + local.set $e|6 + i32.const -1 + local.set $5 + i32.const 1 + local.set $4 + br $finally_dispatch|0 + end + unreachable + catch_all + rethrow $try_finally|0 + end + unreachable + end + local.get $4 + i32.const 1 + i32.eq + if + local.get $5 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + unreachable + ) + (func $exceptions/Inner#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/Outer#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/Outer#set:inner + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/Inner#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $exceptions/Outer#set:inner + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/Outer#process (param $this i32) (result i32) + (local $e i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + try $try|0 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $exceptions/Outer#get:inner + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $exceptions/Inner#riskyOperation + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + catch $error + + local.set $e + i32.const -1 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + unreachable + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 0 + i32.const 2800 + call $~lib/error/RangeError#constructor + throw $error + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 0 + i32.const 2800 + call $~lib/error/RangeError#constructor + throw $error + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 0 + i32.const 400 + call $~lib/error/RangeError#constructor + throw $error + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 0 + i32.const 400 + call $~lib/error/RangeError#constructor + throw $error + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $exceptions/testArrayWithExceptions (result i32) + (local $arr i32) + (local $sum i32) + (local $i i32) + (local $e i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/array/Array#constructor + local.tee $arr + i32.store + local.get $arr + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + local.get $arr + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + local.get $arr + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + i32.const 0 + local.set $sum + try $try|0 + i32.const 0 + local.set $i + loop $for-loop|1 + local.get $i + local.get $arr + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + call $~lib/array/Array#get:length + i32.lt_s + if + local.get $sum + local.get $arr + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $i + call $~lib/array/Array#__get + i32.add + local.set $sum + local.get $sum + i32.const 5 + i32.gt_s + if + i32.const 0 + i32.const 2848 + call $~lib/error/Error#constructor + throw $error + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|1 + end + end + catch $error + + local.set $e + local.get $sum + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + i32.const 0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $exceptions/innerRethrow + (local $e i32) + (local $1 i32) + (local $e|2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + try $try_finally|0 + try $try|1 + i32.const 0 + i32.const 2896 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e|2 + i32.const 0 + global.set $exceptions/rethrowFinallyRan + i32.const 0 + i32.const 2944 + local.get $e|2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $~lib/error/Error#get:message + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $~lib/string/String.__concat + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch_all + i32.const 1 + global.set $exceptions/rethrowFinallyRan + rethrow $try_finally|0 + end + unreachable + ) + (func $exceptions/StateMachine#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 5 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/StateMachine#set:state + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/StateMachine#set:errorState + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/StateMachine#transition (param $this i32) (param $newState i32) + (local $e i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try $try|0 + local.get $newState + i32.const 0 + i32.lt_s + if + i32.const 0 + i32.const 2992 + call $~lib/error/Error#constructor + throw $error + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $newState + call $exceptions/StateMachine#set:state + catch $error + + local.set $e + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const 1 + call $exceptions/StateMachine#set:errorState + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.const -1 + call $exceptions/StateMachine#set:state + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $exceptions/StateMachine#reset (param $this i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try $try_finally|0 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 0 + call $exceptions/StateMachine#set:state + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 0 + call $exceptions/StateMachine#set:errorState + catch_all + rethrow $try_finally|0 + end + local.get $1 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $exceptions/testDeepNesting (result i32) + (local $e i32) + (local $1 i32) + (local $2 i32) + (local $e|3 i32) + (local $e|4 i32) + (local $5 i32) + (local $6 i32) + (local $e|7 i32) + (local $8 i32) + (local $9 i32) + (local $e|10 i32) + (local $e|11 i32) + (local $e|12 i32) + (local $13 i32) + (local $14 i32) + (local $e|15 i32) + (local $16 i32) + (local $17 i32) + (local $e|18 i32) + (local $e|19 i32) + (local $20 i32) + (local $21 i32) + (local $e|22 i32) + (local $23 i32) + (local $24 i32) + (local $e|25 i32) + (local $e|26 i32) + (local $e|27 i32) + (local $28 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 192 + global.set $exceptions/deepNestingOrder + try $try_finally|0 + try $try|7 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3040 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + try $try_finally|8 + try $try|11 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3072 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + try $try_finally|12 + try $try|13 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3104 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + i32.const 0 + i32.const 3136 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e|25 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3168 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + i32.const 0 + i32.const 3200 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch_all + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3248 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|12 + end + unreachable + catch $error + + local.set $e|26 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3280 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + end + catch_all + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3312 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|8 + end + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3312 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + local.get $20 + i32.const 1 + i32.eq + if + local.get $21 + local.set $28 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $28 + return + end + catch $error + + local.set $e|27 + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3344 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + end + catch_all + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3376 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|0 + end + global.get $exceptions/deepNestingOrder + local.set $28 + global.get $~lib/memory/__stack_pointer + local.get $28 + i32.store + local.get $28 + i32.const 3376 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + local.get $13 + i32.const 1 + i32.eq + if + local.get $14 + local.set $28 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $28 + return + end + i32.const 1 + local.set $28 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $28 + return + ) + (func $exceptions/Counter#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $exceptions/Counter#set:count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $exceptions/Counter#increment (param $this i32) (result i32) + (local $e i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + try $try|0 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $exceptions/Counter#get:count + i32.const 1 + i32.add + call $exceptions/Counter#set:count + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $exceptions/Counter#get:count + i32.const 3 + i32.gt_s + if + i32.const 0 + i32.const 3488 + call $~lib/error/Error#constructor + throw $error + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $exceptions/Counter#get:count + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + catch $error + + local.set $e + i32.const -1 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + unreachable + ) + (func $~lib/string/String#indexOf (param $this i32) (param $search i32) (param $start i32) (result i32) + (local $searchLen i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $searchStart i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $search + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store + local.get $10 + call $~lib/string/String#get:length + local.set $searchLen + local.get $searchLen + i32.eqz + if + i32.const 0 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $this + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store + local.get $10 + call $~lib/string/String#get:length + local.set $len + local.get $len + i32.eqz + if + i32.const -1 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $start + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + local.set $searchStart + local.get $len + local.get $searchLen + i32.sub + local.set $len + loop $for-loop|0 + local.get $searchStart + local.get $len + i32.le_s + if + local.get $this + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store + local.get $10 + local.get $searchStart + local.get $search + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + i32.const 0 + local.get $searchLen + call $~lib/util/string/compareImpl + i32.eqz + if + local.get $searchStart + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $searchStart + i32.const 1 + i32.add + local.set $searchStart + br $for-loop|0 + end + end + i32.const -1 + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/string/String#includes (param $this i32) (param $search i32) (param $start i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $search + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $start + call $~lib/string/String#indexOf + i32.const -1 + i32.ne + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $exceptions/testCatchAbort (result i32) + (local $caught i32) + (local $e i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $caught + try $try|0 + i32.const 3664 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/builtins/abort + catch $error + + local.set $e + i32.const 1 + local.set $caught + local.get $e + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/error/Error#get:message + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 3664 + i32.const 0 + call $~lib/string/String#includes + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 515 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $caught + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $exceptions/testCatchRuntimeError (result i32) + (local $caught i32) + (local $e i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $caught + try $try|0 + global.get $~lib/builtins/usize.MAX_VALUE + i32.const 1 + call $~lib/rt/itcms/__new + drop + catch $error + + local.set $e + i32.const 1 + local.set $caught + local.get $e + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/error/Error#get:message + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/string/String#get:length + i32.const 0 + i32.gt_s + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 531 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $caught + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $exceptions/testCatchAbortFromFunction (result i32) + (local $caught i32) + (local $e i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $caught + try $try|0 + call $exceptions/functionThatAborts + catch $error + + local.set $e + i32.const 1 + local.set $caught + local.get $e + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/error/Error#get:message + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 3744 + i32.const 0 + call $~lib/string/String#includes + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 548 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $caught + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $exceptions/testCatchVariableType (result i32) + (local $e i32) + (local $msg i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + try $try|0 + i32.const 0 + i32.const 3808 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $e + global.get $~lib/memory/__stack_pointer + local.get $e + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/error/Error#get:message + local.tee $msg + i32.store offset=4 + local.get $msg + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 3808 + call $~lib/string/String.__eq + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + unreachable + ) + (func $exceptions/testCatchCustomError2 (result i32) + (local $e i32) + (local $1 i32) + (local $custom i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + try $try|0 + i32.const 0 + i32.const 3856 + i32.const 99 + call $exceptions/CustomError#constructor + throw $error + catch $error + + local.set $e + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $e + local.tee $1 + i32.store + local.get $1 + call $~instanceof|exceptions/CustomError + if (result i32) + local.get $1 + else + i32.const 3904 + i32.const 2336 + i32.const 573 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.tee $custom + i32.store offset=4 + local.get $custom + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $3 + call $~lib/error/Error#get:message + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + i32.const 3856 + call $~lib/string/String.__eq + if (result i32) + local.get $custom + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $exceptions/CustomError#get:code + i32.const 99 + i32.eq + else + i32.const 0 + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + unreachable + ) + (func $start:exceptions + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 80 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 352 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 2160 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $exceptions/testTryCatch + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchVar + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 2384 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testNoThrow + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testFinally + global.get $exceptions/finallyRan + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 48 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testNested + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 63 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testReturnInCatchFinally + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 76 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/returnInCatchFinallyRan + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testTryCatchFinally + global.get $exceptions/tryCatchFinallyResult + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/tryCatchFinallyRan + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testFinallyWithException + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testFinallyNormalCompletion + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 124 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCustomError + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 147 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testResourceCleanup + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 185 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/Resource.disposed + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 186 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testResourceCleanupWithException + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 203 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/Calculator#constructor + global.set $exceptions/calc + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 10 + i32.const 2 + call $exceptions/Calculator#divide + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 237 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 10 + i32.const 0 + call $exceptions/Calculator#divide + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 238 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Calculator#get:value + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 239 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + call $exceptions/Calculator#set:value + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.const 4 + call $exceptions/Calculator#safeDivide + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 242 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/calc + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.const 0 + call $exceptions/Calculator#safeDivide + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 243 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/Outer#constructor + global.set $exceptions/outer + global.get $exceptions/outer + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Outer#process + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 274 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testArrayWithExceptions + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 296 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testRethrowWithFinally + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 321 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/StateMachine#constructor + global.set $exceptions/sm + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 1 + call $exceptions/StateMachine#transition + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:state + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 352 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:errorState + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 353 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const -5 + call $exceptions/StateMachine#transition + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:state + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 356 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:errorState + i32.const 0 + i32.ne + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#reset + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:state + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 360 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/sm + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/StateMachine#get:errorState + i32.const 0 + i32.ne + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 361 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testDeepNesting + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 393 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/deepNestingOrder + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 3408 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 394 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/Counter#constructor + global.set $exceptions/counter + global.get $exceptions/counter + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Counter#increment + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 414 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/counter + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Counter#increment + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 415 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/counter + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Counter#increment + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 416 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/counter + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $exceptions/Counter#increment + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 417 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testReturnFromTry + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 429 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $exceptions/multiReturnFinallyCount + i32.const -5 + call $exceptions/testMultipleReturnsWithFinally + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 453 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 454 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/testMultipleReturnsWithFinally + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 456 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 457 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + call $exceptions/testMultipleReturnsWithFinally + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 459 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 460 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 200 + call $exceptions/testMultipleReturnsWithFinally + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 462 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 463 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testReturnInFinally + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 474 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testReturnInFinallyOverridesCatch + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 487 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testReturnInFinallySuppressesException + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 500 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/finallyReturnSuppressedExceptionRan + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 501 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchAbort + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 519 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchRuntimeError + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 535 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchAbortFromFunction + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 552 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchVariableType + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 565 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $exceptions/testCatchCustomError2 + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 2336 + i32.const 578 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/number/utoa32 (param $value i32) (param $radix i32) (result i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|7 i32) + (local $buffer|8 i32) + (local $num|9 i32) + (local $offset|10 i32) + (local $decimals|11 i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end + if + i32.const 0 + i32.const 464 + call $~lib/error/RangeError#constructor + throw $error + end + local.get $value + i32.eqz + if + i32.const 592 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer + local.get $value + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 31 + local.get $value + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|7 + global.get $~lib/memory/__stack_pointer + local.get $decimals|7 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|8 + local.get $value + local.set $num|9 + local.get $decimals|7 + local.set $offset|10 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|8 + local.get $num|9 + i64.extend_i32_u + local.get $offset|10 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + i64.extend_i32_u + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|11 + global.get $~lib/memory/__stack_pointer + local.get $decimals|11 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $value + i64.extend_i32_u + local.get $decimals|11 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $out + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $exceptions/calc + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/outer + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/sm + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/deepNestingOrder + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/counter + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 400 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2800 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1024 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2080 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/error/Error~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/error/RangeError~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/error/Error~visit + ) + (func $exceptions/CustomError~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/error/Error~visit + ) + (func $exceptions/Outer~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $exceptions/Counter + block $exceptions/StateMachine + block $~lib/array/Array + block $exceptions/Inner + block $exceptions/Outer + block $exceptions/Calculator + block $exceptions/Resource + block $exceptions/CustomError + block $~lib/error/RangeError + block $~lib/error/Error + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/error/Error $~lib/error/RangeError $exceptions/CustomError $exceptions/Resource $exceptions/Calculator $exceptions/Outer $exceptions/Inner $~lib/array/Array $exceptions/StateMachine $exceptions/Counter $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/error/Error~visit + return + end + local.get $0 + local.get $1 + call $~lib/error/RangeError~visit + return + end + local.get $0 + local.get $1 + call $exceptions/CustomError~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $exceptions/Outer~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/exceptions.json b/tests/compiler/exceptions.json new file mode 100644 index 0000000000..bf3583d70c --- /dev/null +++ b/tests/compiler/exceptions.json @@ -0,0 +1,3 @@ +{ + "features": ["exception-handling"] +} diff --git a/tests/compiler/exceptions.release.wat b/tests/compiler/exceptions.release.wat new file mode 100644 index 0000000000..c9c28658bf --- /dev/null +++ b/tests/compiler/exceptions.release.wat @@ -0,0 +1,5015 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func)) + (type $5 (func (result i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32) (result i32))) + (type $9 (func (param i32 i32 i64))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $exceptions/tryCatchFinallyRan (mut i32) (i32.const 0)) + (global $exceptions/tryCatchFinallyResult (mut i32) (i32.const 0)) + (global $exceptions/finallyWithExceptionRan (mut i32) (i32.const 0)) + (global $exceptions/Resource.instances (mut i32) (i32.const 0)) + (global $exceptions/Resource.disposed (mut i32) (i32.const 0)) + (global $exceptions/calc (mut i32) (i32.const 0)) + (global $exceptions/outer (mut i32) (i32.const 0)) + (global $exceptions/rethrowFinallyRan (mut i32) (i32.const 0)) + (global $exceptions/sm (mut i32) (i32.const 0)) + (global $exceptions/deepNestingOrder (mut i32) (i32.const 1216)) + (global $exceptions/counter (mut i32) (i32.const 0)) + (global $exceptions/multiReturnFinallyCount (mut i32) (i32.const 0)) + (global $exceptions/finallyReturnSuppressedExceptionRan (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 37804)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $2 (i32.const 1132) "\1c") + (data $2.1 (i32.const 1144) "\02\00\00\00\n\00\00\00a\00b\00o\00r\00t") + (data $3 (i32.const 1164) "\1c") + (data $3.1 (i32.const 1176) "\02\00\00\00\08\00\00\00 \00i\00n\00 ") + (data $4 (i32.const 1196) "\1c") + (data $4.1 (i32.const 1208) "\02") + (data $5 (i32.const 1228) "\1c") + (data $5.1 (i32.const 1240) "\02\00\00\00\02\00\00\00:") + (data $6 (i32.const 1260) ",") + (data $6.1 (i32.const 1272) "\02\00\00\00\14\00\00\00R\00a\00n\00g\00e\00E\00r\00r\00o\00r") + (data $7 (i32.const 1308) "<") + (data $7.1 (i32.const 1320) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $9 (i32.const 1404) "<") + (data $9.1 (i32.const 1416) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $10 (i32.const 1468) "|") + (data $10.1 (i32.const 1480) "\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data $11 (i32.const 1596) "\1c") + (data $11.1 (i32.const 1608) "\02\00\00\00\02\00\00\000") + (data $12 (i32.const 1628) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009") + (data $13 (i32.const 2028) "\1c\04") + (data $13.1 (i32.const 2040) "\02\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f") + (data $14 (i32.const 3084) "\\") + (data $14.1 (i32.const 3096) "\02\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data $16 (i32.const 3212) "<") + (data $16.1 (i32.const 3224) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $17 (i32.const 3276) "\1c") + (data $17.1 (i32.const 3288) "\02\00\00\00\n\00\00\00E\00r\00r\00o\00r") + (data $18 (i32.const 3308) "\1c") + (data $18.1 (i32.const 3320) "\02\00\00\00\08\00\00\00o\00o\00p\00s") + (data $19 (i32.const 3340) ",") + (data $19.1 (i32.const 3352) "\02\00\00\00\1a\00\00\00e\00x\00c\00e\00p\00t\00i\00o\00n\00s\00.\00t\00s") + (data $20 (i32.const 3388) "\1c") + (data $20.1 (i32.const 3400) "\02\00\00\00\06\00\00\00m\00s\00g") + (data $21 (i32.const 3420) "\1c") + (data $21.1 (i32.const 3432) "\02\00\00\00\n\00\00\00i\00n\00n\00e\00r") + (data $22 (i32.const 3452) "\1c") + (data $22.1 (i32.const 3464) "\02\00\00\00\n\00\00\00o\00u\00t\00e\00r") + (data $23 (i32.const 3484) "\1c") + (data $23.1 (i32.const 3496) "\02\00\00\00\n\00\00\00e\00r\00r\00o\00r") + (data $24 (i32.const 3516) ",") + (data $24.1 (i32.const 3528) "\02\00\00\00\1c\00\00\00w\00i\00l\00l\00 \00p\00r\00o\00p\00a\00g\00a\00t\00e") + (data $25 (i32.const 3564) "\1c") + (data $25.1 (i32.const 3576) "\02\00\00\00\0c\00\00\00c\00u\00s\00t\00o\00m") + (data $26 (i32.const 3596) ",") + (data $26.1 (i32.const 3608) "\02\00\00\00\16\00\00\00w\00o\00r\00k\00 \00f\00a\00i\00l\00e\00d") + (data $27 (i32.const 3644) "<") + (data $27.1 (i32.const 3656) "\02\00\00\00 \00\00\00d\00i\00v\00i\00s\00i\00o\00n\00 \00b\00y\00 \00z\00e\00r\00o") + (data $28 (i32.const 3708) ",") + (data $28.1 (i32.const 3720) "\02\00\00\00\16\00\00\00i\00n\00n\00e\00r\00 \00e\00r\00r\00o\00r") + (data $29 (i32.const 3756) ",") + (data $29.1 (i32.const 3768) "\02\00\00\00\1a\00\00\00w\00r\00a\00p\00p\00e\00d\00 \00e\00r\00r\00o\00r") + (data $30 (i32.const 3804) ",") + (data $30.1 (i32.const 3816) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $31 (i32.const 3852) ",") + (data $31.1 (i32.const 3864) "\02\00\00\00\18\00\00\00s\00u\00m\00 \00e\00x\00c\00e\00e\00d\00e\00d") + (data $32 (i32.const 3900) ",") + (data $32.1 (i32.const 3912) "\02\00\00\00\10\00\00\00o\00r\00i\00g\00i\00n\00a\00l") + (data $33 (i32.const 3948) ",") + (data $33.1 (i32.const 3960) "\02\00\00\00\14\00\00\00r\00e\00t\00h\00r\00o\00w\00n\00:\00 ") + (data $34 (i32.const 3996) ",") + (data $34.1 (i32.const 4008) "\02\00\00\00\1a\00\00\00i\00n\00v\00a\00l\00i\00d\00 \00s\00t\00a\00t\00e") + (data $35 (i32.const 4044) "\1c") + (data $35.1 (i32.const 4056) "\02\00\00\00\06\00\00\00t\001\00,") + (data $36 (i32.const 4076) "\1c") + (data $36.1 (i32.const 4088) "\02\00\00\00\06\00\00\00t\002\00,") + (data $37 (i32.const 4108) "\1c") + (data $37.1 (i32.const 4120) "\02\00\00\00\06\00\00\00t\003\00,") + (data $38 (i32.const 4140) "\1c") + (data $38.1 (i32.const 4152) "\02\00\00\00\08\00\00\00d\00e\00e\00p") + (data $39 (i32.const 4172) "\1c") + (data $39.1 (i32.const 4184) "\02\00\00\00\06\00\00\00c\003\00,") + (data $40 (i32.const 4204) ",") + (data $40.1 (i32.const 4216) "\02\00\00\00\0e\00\00\00r\00e\00t\00h\00r\00o\00w") + (data $41 (i32.const 4252) "\1c") + (data $41.1 (i32.const 4264) "\02\00\00\00\06\00\00\00f\003\00,") + (data $42 (i32.const 4284) "\1c") + (data $42.1 (i32.const 4296) "\02\00\00\00\06\00\00\00c\002\00,") + (data $43 (i32.const 4316) "\1c") + (data $43.1 (i32.const 4328) "\02\00\00\00\06\00\00\00f\002\00,") + (data $44 (i32.const 4348) "\1c") + (data $44.1 (i32.const 4360) "\02\00\00\00\06\00\00\00c\001\00,") + (data $45 (i32.const 4380) "\1c") + (data $45.1 (i32.const 4392) "\02\00\00\00\06\00\00\00f\001\00,") + (data $46 (i32.const 4412) "L") + (data $46.1 (i32.const 4424) "\02\00\00\000\00\00\00t\001\00,\00t\002\00,\00t\003\00,\00c\003\00,\00f\003\00,\00c\002\00,\00f\002\00,\00f\001\00,") + (data $47 (i32.const 4492) ",") + (data $47.1 (i32.const 4504) "\02\00\00\00\16\00\00\00m\00a\00x\00 \00r\00e\00a\00c\00h\00e\00d") + (data $48 (i32.const 4540) "\1c") + (data $48.1 (i32.const 4552) "\02\00\00\00\08\00\00\00z\00e\00r\00o") + (data $49 (i32.const 4572) "\1c") + (data $49.1 (i32.const 4584) "\02\00\00\00\08\00\00\00t\00e\00s\00t") + (data $50 (i32.const 4604) "<") + (data $50.1 (i32.const 4616) "\02\00\00\00(\00\00\00s\00h\00o\00u\00l\00d\00 \00b\00e\00 \00s\00u\00p\00p\00r\00e\00s\00s\00e\00d") + (data $51 (i32.const 4668) "L") + (data $51.1 (i32.const 4680) "\02\00\00\000\00\00\00t\00h\00i\00s\00 \00s\00h\00o\00u\00l\00d\00 \00b\00e\00 \00c\00a\00t\00c\00h\00a\00b\00l\00e") + (data $52 (i32.const 4748) "<") + (data $52.1 (i32.const 4760) "\02\00\00\00&\00\00\00a\00b\00o\00r\00t\00 \00f\00r\00o\00m\00 \00f\00u\00n\00c\00t\00i\00o\00n") + (data $53 (i32.const 4812) ",") + (data $53.1 (i32.const 4824) "\02\00\00\00\12\00\00\00t\00y\00p\00e\00 \00t\00e\00s\00t") + (data $54 (i32.const 4860) ",") + (data $54.1 (i32.const 4872) "\02\00\00\00\1c\00\00\00c\00u\00s\00t\00o\00m\00 \00e\00r\00r\00o\00r\00 \002") + (data $55 (i32.const 4908) "<") + (data $55.1 (i32.const 4920) "\02\00\00\00 \00\00\00i\00n\00v\00a\00l\00i\00d\00 \00d\00o\00w\00n\00c\00a\00s\00t") + (data $56 (i32.const 4976) "\0e\00\00\00 \00\00\00 \00\00\00 ") + (data $56.1 (i32.const 5008) " \00\00\00 \00\00\00\00\00\00\00 \00\00\00\02\t\00\00 \00\00\00 ") + (tag $error (type $2) (param i32)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 40 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 1152 + local.get $0 + select + local.tee $0 + i32.store + local.get $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=36 + i32.const 1184 + local.get $1 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + local.get $1 + i32.const 1248 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $2 + call $~lib/number/U32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=28 + local.get $1 + local.get $2 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=20 + local.get $1 + i32.const 1248 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=12 + local.get $3 + call $~lib/number/U32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=16 + local.get $1 + local.get $2 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + call $~lib/string/String.__concat + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + i32.const 0 + local.get $0 + call $~lib/error/Error#constructor + throw $error + ) + (func $~lib/error/Error#constructor (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $0 + local.get $1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 3296 + i32.store + local.get $0 + i32.const 3296 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1216 + i32.store offset=4 + local.get $0 + i32.const 1216 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.tee $2 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + block $__inlined_func$~lib/string/String#concat$277 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const -2 + i32.and + local.tee $4 + local.get $3 + i32.add + local.tee $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1216 + local.set $0 + br $__inlined_func$~lib/string/String#concat$277 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=4 + local.get $0 + local.get $2 + local.get $3 + memory.copy + local.get $0 + local.get $3 + i32.add + local.get $1 + local.get $4 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 0 + i32.const 1056 + call $~lib/error/Error#constructor + throw $error + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$71 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$71 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $4 + local.get $0 + i32.const 16 + i32.add + local.tee $2 + i32.const 1073741820 + i32.gt_u + if + i32.const 0 + i32.const 1056 + call $~lib/error/Error#constructor + throw $error + end + local.get $4 + local.get $2 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $2 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $5 + i32.const 256 + i32.ge_u + if (result i32) + local.get $5 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $5 + i32.const 1 + i32.const 27 + local.get $5 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $5 + end + else + local.get $5 + end + i32.const 4 + local.get $4 + i32.load offset=1568 + memory.size + local.tee $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $2 + local.get $3 + local.get $2 + local.get $3 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $4 + local.get $2 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $4 + local.get $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $5 + local.get $2 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 3232 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load + local.set $6 + local.get $5 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 3232 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + local.get $5 + i32.sub + local.tee $3 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $5 + local.get $6 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.add + local.tee $5 + local.get $3 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $4 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $6 + i32.const -2 + i32.and + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $3 + local.get $3 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1328 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $0 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + block $folding-inner0 + local.get $1 + i32.eqz + local.get $0 + i32.eqz + i32.or + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $2 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.ne + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + i32.const 0 + local.get $1 + local.get $2 + call $~lib/util/string/compareImpl + i32.eqz + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) + (func $~lib/object/Object#constructor (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $exceptions/testMultipleReturnsWithFinally (param $0 i32) (result i32) + (local $1 i32) + block $finally_dispatch|0 + try $try_finally|0 + try + local.get $0 + i32.const 0 + i32.lt_s + if + i32.const -1 + local.set $1 + br $finally_dispatch|0 + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 4560 + call $~lib/error/Error#constructor + throw $error + end + local.get $0 + i32.const 100 + i32.gt_s + if + i32.const 100 + local.set $1 + br $finally_dispatch|0 + end + local.get $0 + local.set $1 + br $finally_dispatch|0 + catch $error + + drop + br $finally_dispatch|0 + end + unreachable + catch_all + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.add + global.set $exceptions/multiReturnFinallyCount + rethrow $try_finally|0 + end + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.add + global.set $exceptions/multiReturnFinallyCount + local.get $1 + ) + (func $exceptions/Counter#increment (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + try + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load + i32.const 1 + i32.add + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + i32.const 3 + i32.gt_s + if + i32.const 0 + i32.const 4512 + call $~lib/error/Error#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + catch $error + + drop + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + unreachable + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 3232 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 3232 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 3232 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1328 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$272 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 37804 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1328 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$272 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1328 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 4976 + i32.load + i32.gt_u + if + i32.const 0 + i32.const 1424 + call $~lib/error/Error#constructor + throw $error + end + local.get $1 + i32.const 2 + i32.shl + i32.const 4980 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner0 + block $invalid + block $exceptions/Counter + block $exceptions/StateMachine + block $~lib/array/Array + block $exceptions/Inner + block $exceptions/Outer + block $exceptions/Calculator + block $exceptions/Resource + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner0 $folding-inner0 $exceptions/Resource $exceptions/Calculator $exceptions/Outer $exceptions/Inner $~lib/array/Array $exceptions/StateMachine $exceptions/Counter $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + return + end + return + end + unreachable + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + call $~lib/rt/itcms/__visit + ) + (func $~lib/error/RangeError#constructor (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + local.get $0 + call $~lib/error/Error#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1280 + i32.store + local.get $0 + i32.const 1280 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1424 + call $~lib/error/RangeError#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.const 1 + i32.add + local.tee $3 + local.get $0 + i32.load offset=8 + local.tee $4 + i32.const 2 + i32.shr_u + i32.gt_u + if + local.get $3 + i32.const 268435455 + i32.gt_u + if + i32.const 3824 + call $~lib/error/RangeError#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + block $__inlined_func$~lib/rt/itcms/__renew$245 + i32.const 1073741820 + local.get $4 + i32.const 1 + i32.shl + local.tee $4 + local.get $4 + i32.const 1073741820 + i32.ge_u + select + local.tee $4 + i32.const 8 + local.get $3 + local.get $3 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + local.get $3 + local.get $4 + i32.lt_u + select + local.tee $5 + local.get $0 + i32.load + local.tee $4 + i32.const 20 + i32.sub + local.tee $6 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $6 + local.get $5 + i32.store offset=16 + local.get $4 + local.set $3 + br $__inlined_func$~lib/rt/itcms/__renew$245 + end + local.get $5 + local.get $6 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $3 + local.get $4 + local.get $5 + local.get $6 + i32.load offset=16 + local.tee $6 + local.get $5 + local.get $6 + i32.lt_u + select + memory.copy + end + local.get $3 + local.get $4 + i32.ne + if + local.get $0 + local.get $3 + i32.store + local.get $0 + local.get $3 + i32.store offset=4 + local.get $0 + local.get $3 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $5 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) + (local $4 i32) + local.get $0 + local.get $1 + i32.const 1 + i32.shl + i32.add + local.set $1 + local.get $3 + i32.const 4 + i32.ge_u + if (result i32) + local.get $1 + i32.const 7 + i32.and + local.get $2 + i32.const 7 + i32.and + i32.or + else + i32.const 1 + end + i32.eqz + if + loop $do-loop|0 + local.get $1 + i64.load + local.get $2 + i64.load + i64.eq + if + local.get $1 + i32.const 8 + i32.add + local.set $1 + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $3 + i32.const 4 + i32.sub + local.tee $3 + i32.const 4 + i32.ge_u + br_if $do-loop|0 + end + end + end + loop $while-continue|1 + local.get $3 + local.tee $0 + i32.const 1 + i32.sub + local.set $3 + local.get $0 + if + local.get $1 + i32.load16_u + local.tee $0 + local.get $2 + i32.load16_u + local.tee $4 + i32.ne + if + local.get $0 + local.get $4 + i32.sub + return + end + local.get $1 + i32.const 2 + i32.add + local.set $1 + local.get $2 + i32.const 2 + i32.add + local.set $2 + br $while-continue|1 + end + end + i32.const 0 + ) + (func $~lib/string/String#includes (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + block $__inlined_func$~lib/string/String#indexOf$279 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $3 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + local.set $0 + br $__inlined_func$~lib/string/String#indexOf$279 + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $4 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + local.set $0 + br $__inlined_func$~lib/string/String#indexOf$279 + end + i32.const 0 + local.set $0 + local.get $4 + local.get $3 + i32.sub + local.set $4 + loop $for-loop|0 + local.get $0 + local.get $4 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $1 + local.get $3 + call $~lib/util/string/compareImpl + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$~lib/string/String#indexOf$279 + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 3232 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 37808 + i32.const 0 + i32.store + i32.const 39376 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 37808 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 37808 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 37808 + i32.const 39380 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 37808 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 3232 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 3232 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 3232 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + global.get $exceptions/calc + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/outer + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/sm + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/deepNestingOrder + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $exceptions/counter + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 1424 + call $~lib/rt/itcms/__visit + i32.const 3824 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + i32.const 2048 + call $~lib/rt/itcms/__visit + i32.const 3104 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1328 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/number/U32#toString (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $__inlined_func$~lib/util/number/utoa32$17 + local.get $1 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1616 + local.set $0 + br $__inlined_func$~lib/util/number/utoa32$17 + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 100000 + i32.lt_u + if (result i32) + local.get $1 + i32.const 100 + i32.lt_u + if (result i32) + local.get $1 + i32.const 10 + i32.ge_u + i32.const 1 + i32.add + else + local.get $1 + i32.const 10000 + i32.ge_u + i32.const 3 + i32.add + local.get $1 + i32.const 1000 + i32.ge_u + i32.add + end + else + local.get $1 + i32.const 10000000 + i32.lt_u + if (result i32) + local.get $1 + i32.const 1000000 + i32.ge_u + i32.const 6 + i32.add + else + local.get $1 + i32.const 1000000000 + i32.ge_u + i32.const 8 + i32.add + local.get $1 + i32.const 100000000 + i32.ge_u + i32.add + end + end + local.tee $2 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + loop $while-continue|0 + local.get $1 + i32.const 10000 + i32.ge_u + if + local.get $1 + i32.const 10000 + i32.rem_u + local.set $3 + local.get $1 + i32.const 10000 + i32.div_u + local.set $1 + local.get $0 + local.get $2 + i32.const 4 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + i32.add + local.get $3 + i32.const 100 + i32.div_u + i32.const 2 + i32.shl + i32.const 1628 + i32.add + i64.load32_u + local.get $3 + i32.const 100 + i32.rem_u + i32.const 2 + i32.shl + i32.const 1628 + i32.add + i64.load32_u + i64.const 32 + i64.shl + i64.or + i64.store + br $while-continue|0 + end + end + local.get $1 + i32.const 100 + i32.ge_u + if + local.get $0 + local.get $2 + i32.const 2 + i32.sub + local.tee $2 + i32.const 1 + i32.shl + i32.add + local.get $1 + i32.const 100 + i32.rem_u + i32.const 2 + i32.shl + i32.const 1628 + i32.add + i32.load + i32.store + local.get $1 + i32.const 100 + i32.div_u + local.set $1 + end + local.get $1 + i32.const 10 + i32.ge_u + if + local.get $0 + local.get $2 + i32.const 2 + i32.sub + i32.const 1 + i32.shl + i32.add + local.get $1 + i32.const 2 + i32.shl + i32.const 1628 + i32.add + i32.load + i32.store + else + local.get $0 + local.get $2 + i32.const 1 + i32.sub + i32.const 1 + i32.shl + i32.add + local.get $1 + i32.const 48 + i32.add + i32.store16 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + local.get $0 + ) + (func $exceptions/StateMachine#transition (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 0 + i32.const 4016 + call $~lib/error/Error#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store + catch $error + + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 1 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const -1 + i32.store + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $exceptions/Resource#constructor (result i32) + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $exceptions/Resource.instances + i32.const 1 + i32.add + global.set $exceptions/Resource.instances + local.get $0 + global.get $exceptions/Resource.instances + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $exceptions/CustomError#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $0 + call $~lib/error/Error#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $exceptions/Calculator#safeDivide (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $finally_dispatch|0 + try $try_finally|0 + try + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 3664 + call $~lib/error/Error#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 20 + local.get $1 + i32.div_s + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + br $finally_dispatch|0 + catch $error + + drop + i32.const -1 + local.set $0 + br $finally_dispatch|0 + end + unreachable + catch_all + rethrow $try_finally|0 + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $exceptions/Calculator#divide (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + try + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 3664 + call $~lib/error/Error#constructor + throw $error + end + i32.const 10 + local.get $1 + i32.div_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + catch $error + + drop + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const -1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + unreachable + ) + (func $~start + call $start:exceptions + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 37804 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1328 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 37804 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 37804 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 3232 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $start:exceptions + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + memory.size + i32.const 16 + i32.shl + i32.const 37804 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1108 + i32.const 1104 + i32.store + i32.const 1112 + i32.const 1104 + i32.store + i32.const 1104 + global.set $~lib/rt/itcms/pinSpace + i32.const 1380 + i32.const 1376 + i32.store + i32.const 1384 + i32.const 1376 + i32.store + i32.const 1376 + global.set $~lib/rt/itcms/toSpace + i32.const 3188 + i32.const 3184 + i32.store + i32.const 3192 + i32.const 3184 + i32.store + i32.const 3184 + global.set $~lib/rt/itcms/fromSpace + block $__inlined_func$exceptions/testTryCatch$176 + try + i32.const 0 + i32.const 3328 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + br $__inlined_func$exceptions/testTryCatch$176 + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $__inlined_func$exceptions/testCatchVar$255 + try + i32.const 0 + i32.const 3408 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$exceptions/testCatchVar$255 + end + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 3408 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$exceptions/testNested$179 + try + try + i32.const 0 + i32.const 3440 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + i32.const 0 + i32.const 3472 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch $error + + drop + br $__inlined_func$exceptions/testNested$179 + end + unreachable + end + block $finally_dispatch|02 + try $try_finally|03 + try + i32.const 0 + i32.const 3504 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + br $finally_dispatch|02 + end + unreachable + catch_all + rethrow $try_finally|03 + end + unreachable + end + try $try_finally|06 + try + i32.const 0 + i32.const 3504 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + i32.const 10 + global.set $exceptions/tryCatchFinallyResult + end + catch_all + i32.const 1 + global.set $exceptions/tryCatchFinallyRan + rethrow $try_finally|06 + end + i32.const 1 + global.set $exceptions/tryCatchFinallyRan + global.get $exceptions/tryCatchFinallyResult + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 92 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/tryCatchFinallyRan + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$exceptions/testFinallyWithException$256 + try + try $try_finally|07 + i32.const 0 + i32.const 3536 + call $~lib/error/Error#constructor + throw $error + catch_all + i32.const 1 + global.set $exceptions/finallyWithExceptionRan + rethrow $try_finally|07 + end + unreachable + catch $error + + drop + global.get $exceptions/finallyWithExceptionRan + i32.const 0 + i32.ne + local.set $1 + br $__inlined_func$exceptions/testFinallyWithException$256 + end + unreachable + end + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$exceptions/testCustomError$183 + try + i32.const 3584 + i32.const 42 + call $exceptions/CustomError#constructor + throw $error + catch $error + + drop + br $__inlined_func$exceptions/testCustomError$183 + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + call $exceptions/Resource#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $exceptions/Resource.disposed + i32.const 1 + i32.add + global.set $exceptions/Resource.disposed + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $exceptions/Resource.disposed + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 186 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + global.set $exceptions/Resource.disposed + global.get $~lib/memory/__stack_pointer + call $exceptions/Resource#constructor + local.tee $1 + i32.store + block $__inlined_func$exceptions/testResourceCleanupWithException$258 + try + try $try_finally|1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + i32.const 0 + i32.const 3616 + call $~lib/error/Error#constructor + throw $error + catch_all + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $exceptions/Resource.disposed + i32.const 1 + i32.add + global.set $exceptions/Resource.disposed + rethrow $try_finally|1 + end + unreachable + catch $error + + drop + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $exceptions/Resource.disposed + local.set $1 + br $__inlined_func$exceptions/testResourceCleanupWithException$258 + end + unreachable + end + local.get $1 + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 203 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + global.set $exceptions/calc + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.const 2 + call $exceptions/Calculator#divide + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 237 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.const 0 + call $exceptions/Calculator#divide + if + i32.const 0 + i32.const 3360 + i32.const 238 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 239 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.const 4 + call $exceptions/Calculator#safeDivide + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 242 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/calc + local.tee $1 + i32.store + local.get $1 + i32.const 0 + call $exceptions/Calculator#safeDivide + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 243 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + call $~lib/object/Object#constructor + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + global.set $exceptions/outer + global.get $~lib/memory/__stack_pointer + global.get $exceptions/outer + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $__inlined_func$exceptions/Outer#process$260 + try + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load + i32.store + try + i32.const 0 + i32.const 3728 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + i32.const 0 + i32.const 3776 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch $error + + drop + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$exceptions/Outer#process$260 + end + unreachable + end + call $exceptions/testArrayWithExceptions + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 296 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $exceptions/rethrowFinallyRan + block $__inlined_func$exceptions/testRethrowWithFinally$281 + try + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + try $try_finally|04 + try + i32.const 0 + i32.const 3920 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $1 + i32.const 0 + global.set $exceptions/rethrowFinallyRan + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store offset=4 + i32.const 3968 + local.get $1 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + i32.const 0 + local.get $1 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch_all + i32.const 1 + global.set $exceptions/rethrowFinallyRan + rethrow $try_finally|04 + end + unreachable + catch $error + + drop + global.get $exceptions/rethrowFinallyRan + i32.const 0 + i32.ne + local.set $1 + br $__inlined_func$exceptions/testRethrowWithFinally$281 + end + unreachable + end + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 321 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 5 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + global.set $exceptions/sm + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.const 1 + call $exceptions/StateMachine#transition + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 352 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load8_u offset=4 + if + i32.const 0 + i32.const 3360 + i32.const 353 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.const -5 + call $exceptions/StateMachine#transition + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 356 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load8_u offset=4 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 357 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load + if + i32.const 0 + i32.const 3360 + i32.const 360 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/sm + local.tee $1 + i32.store + local.get $1 + i32.load8_u offset=4 + if + i32.const 0 + i32.const 3360 + i32.const 361 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1216 + global.set $exceptions/deepNestingOrder + try $try_finally|0 + try + global.get $~lib/memory/__stack_pointer + i32.const 1216 + i32.store + i32.const 1216 + i32.const 4064 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + try $try_finally|8 + try + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4096 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + try $try_finally|12 + try + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4128 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + i32.const 0 + i32.const 4160 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4192 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + i32.const 0 + i32.const 4224 + call $~lib/error/Error#constructor + throw $error + end + unreachable + catch_all + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4272 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|12 + end + unreachable + catch $error + + drop + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4304 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + end + catch_all + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4336 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|8 + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4336 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + catch $error + + drop + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4368 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + end + catch_all + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $0 + i32.store + local.get $0 + i32.const 4400 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + rethrow $try_finally|0 + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4400 + call $~lib/string/String.__concat + global.set $exceptions/deepNestingOrder + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $exceptions/deepNestingOrder + local.tee $1 + i32.store + local.get $1 + i32.const 4432 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 394 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + call $~lib/object/Object#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + global.set $exceptions/counter + global.get $~lib/memory/__stack_pointer + global.get $exceptions/counter + local.tee $1 + i32.store + local.get $1 + call $exceptions/Counter#increment + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 414 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/counter + local.tee $1 + i32.store + local.get $1 + call $exceptions/Counter#increment + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 415 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/counter + local.tee $1 + i32.store + local.get $1 + call $exceptions/Counter#increment + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 416 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $exceptions/counter + local.tee $1 + i32.store + local.get $1 + call $exceptions/Counter#increment + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 417 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.set $exceptions/multiReturnFinallyCount + i32.const -5 + call $exceptions/testMultipleReturnsWithFinally + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 453 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 454 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + call $exceptions/testMultipleReturnsWithFinally + if + i32.const 0 + i32.const 3360 + i32.const 456 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 457 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + call $exceptions/testMultipleReturnsWithFinally + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 459 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 460 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 200 + call $exceptions/testMultipleReturnsWithFinally + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 462 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $exceptions/multiReturnFinallyCount + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 3360 + i32.const 463 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $__inlined_func$exceptions/testReturnInFinallyOverridesCatch$194 + try + try + i32.const 0 + i32.const 4592 + call $~lib/error/Error#constructor + throw $error + catch $error + + drop + br $__inlined_func$exceptions/testReturnInFinallyOverridesCatch$194 + end + unreachable + catch_all + br $__inlined_func$exceptions/testReturnInFinallyOverridesCatch$194 + end + unreachable + end + block $__inlined_func$exceptions/testReturnInFinallySuppressesException$195 + try + i32.const 0 + i32.const 4624 + call $~lib/error/Error#constructor + throw $error + catch_all + i32.const 1 + global.set $exceptions/finallyReturnSuppressedExceptionRan + br $__inlined_func$exceptions/testReturnInFinallySuppressesException$195 + end + unreachable + end + global.get $exceptions/finallyReturnSuppressedExceptionRan + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 501 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + try + i32.const 4688 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/builtins/abort + catch $error + + local.set $1 + i32.const 1 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store + local.get $1 + i32.const 4688 + call $~lib/string/String#includes + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 515 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 519 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $0 + try + i32.const -1 + i32.const 1 + call $~lib/rt/itcms/__new + drop + catch $error + + local.set $1 + i32.const 1 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 531 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 535 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $0 + try + i32.const 4768 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/builtins/abort + catch $error + + local.set $1 + i32.const 1 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=8 + local.tee $1 + i32.store + local.get $1 + i32.const 4768 + call $~lib/string/String#includes + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 548 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 552 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $__inlined_func$exceptions/testCatchVariableType$266 + try + i32.const 0 + i32.const 4832 + call $~lib/error/Error#constructor + throw $error + catch $error + + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 4832 + call $~lib/string/String.__eq + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$exceptions/testCatchVariableType$266 + end + unreachable + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 565 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + block $__inlined_func$exceptions/testCatchCustomError2$267 + try + i32.const 4880 + i32.const 99 + call $exceptions/CustomError#constructor + throw $error + catch $error + + local.set $0 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 8 + i32.sub + i32.load + i32.const 6 + i32.ne + if + i32.const 4928 + i32.const 3360 + i32.const 573 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $1 + i32.store offset=8 + local.get $1 + i32.const 4880 + call $~lib/string/String.__eq + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + i32.load offset=12 + i32.const 99 + i32.eq + else + i32.const 0 + end + local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$exceptions/testCatchCustomError2$267 + end + unreachable + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 3360 + i32.const 578 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $exceptions/testArrayWithExceptions (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + local.get $0 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 32 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=12 + local.get $0 + local.get $3 + i32.store + local.get $0 + local.get $3 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 32 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 3 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.const 1 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1 + i32.const 2 + call $~lib/array/Array#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2 + i32.const 3 + call $~lib/array/Array#__set + try + loop $for-loop|1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.get $3 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5036 + i32.lt_s + if + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1424 + call $~lib/error/RangeError#constructor + throw $error + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + local.get $3 + i32.add + local.tee $2 + i32.const 5 + i32.gt_s + if + i32.const 0 + i32.const 3872 + call $~lib/error/Error#constructor + throw $error + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + catch $error + + drop + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + ) +) diff --git a/tests/compiler/exceptions.ts b/tests/compiler/exceptions.ts new file mode 100644 index 0000000000..2c4edb2b6a --- /dev/null +++ b/tests/compiler/exceptions.ts @@ -0,0 +1,578 @@ +// Basic throw +function testThrow(): void { + throw new Error("test"); +} + +// Try-catch basic +function testTryCatch(): i32 { + try { + throw new Error("oops"); + } catch (e) { + return 1; + } + return 0; +} +assert(testTryCatch() == 1); + +// Catch variable access +function testCatchVar(): string { + try { + throw new Error("msg"); + } catch (e) { + return (e as Error).message; + } + return ""; +} +assert(testCatchVar() == "msg"); + +// No exception thrown +function testNoThrow(): i32 { + try { + return 1; + } catch (e) { + return 2; + } +} +assert(testNoThrow() == 1); + +// Finally basic +let finallyRan = false; +function testFinally(): void { + try { + // normal completion + } finally { + finallyRan = true; + } +} +testFinally(); +assert(finallyRan); + +// Nested try-catch +function testNested(): i32 { + try { + try { + throw new Error("inner"); + } catch (e) { + throw new Error("outer"); + } + } catch (e) { + return 42; + } + return 0; +} +assert(testNested() == 42); + +// Try-catch-finally with return in catch - finally must run before return +let returnInCatchFinallyRan = false; +function testReturnInCatchFinally(): i32 { + try { + throw new Error("error"); + } catch (e) { + return 10; // Return in catch - finally must run first! + } finally { + returnInCatchFinallyRan = true; + } +} +assert(testReturnInCatchFinally() == 10); +assert(returnInCatchFinallyRan); + +// Try-catch-finally (without return in catch) +let tryCatchFinallyRan = false; +let tryCatchFinallyResult = 0; +function testTryCatchFinally(): void { + try { + throw new Error("error"); + } catch (e) { + tryCatchFinallyResult = 10; + } finally { + tryCatchFinallyRan = true; + } +} +testTryCatchFinally(); +assert(tryCatchFinallyResult == 10); +assert(tryCatchFinallyRan); + +// Finally with exception propagation +let finallyWithExceptionRan = false; +function innerThrow(): void { + try { + throw new Error("will propagate"); + } finally { + finallyWithExceptionRan = true; + } +} +function testFinallyWithException(): i32 { + try { + innerThrow(); + } catch (e) { + return finallyWithExceptionRan ? 1 : 0; + } + return 0; +} +assert(testFinallyWithException() == 1); + +// Try-finally with normal completion (no exception) +let finallyNormalRan = false; +function testFinallyNormalCompletion(): i32 { + try { + // no exception + } finally { + finallyNormalRan = true; + } + return finallyNormalRan ? 1 : 0; +} +assert(testFinallyNormalCompletion() == 1); + +// ============================================================================ +// Complex tests with classes +// ============================================================================ + +// Custom error class extending Error +class CustomError extends Error { + constructor(message: string, public code: i32) { + super(message); + } +} + +// Test throwing custom error +function testCustomError(): i32 { + try { + throw new CustomError("custom", 42); + } catch (e) { + // e is Error type, but carries CustomError data + return 1; + } + return 0; +} +assert(testCustomError() == 1); + +// Resource management class +class Resource { + static instances: i32 = 0; + static disposed: i32 = 0; + + id: i32; + + constructor() { + this.id = ++Resource.instances; + } + + dispose(): void { + Resource.disposed++; + } + + doWork(): void { + // Might throw + } + + doWorkThatThrows(): void { + throw new Error("work failed"); + } +} + +// Test resource cleanup in finally +function testResourceCleanup(): i32 { + let r = new Resource(); + let result: i32 = 0; + try { + r.doWork(); + result = 1; + } finally { + r.dispose(); + } + return result; +} +assert(testResourceCleanup() == 1); +assert(Resource.disposed == 1); + +// Test resource cleanup when exception thrown +function testResourceCleanupWithException(): i32 { + Resource.disposed = 0; // Reset + let r = new Resource(); + try { + try { + r.doWorkThatThrows(); + } finally { + r.dispose(); + } + } catch (e) { + return Resource.disposed; // Should be 1 - disposed even though exception + } + return 0; +} +assert(testResourceCleanupWithException() == 1); + +// Class with method that uses try-catch +class Calculator { + value: i32 = 0; + + divide(a: i32, b: i32): i32 { + try { + if (b == 0) { + throw new Error("division by zero"); + } + return a / b; + } catch (e) { + this.value = -1; // Mark error state + return 0; + } + } + + safeDivide(a: i32, b: i32): i32 { + try { + if (b == 0) { + throw new Error("division by zero"); + } + this.value = a / b; + return this.value; + } catch (e) { + return -1; + } finally { + // Always runs - could log or cleanup + } + } +} + +let calc = new Calculator(); +assert(calc.divide(10, 2) == 5); +assert(calc.divide(10, 0) == 0); +assert(calc.value == -1); + +calc.value = 0; +assert(calc.safeDivide(20, 4) == 5); +assert(calc.safeDivide(20, 0) == -1); + +// Nested class exception handling +class Outer { + inner: Inner; + + constructor() { + this.inner = new Inner(); + } + + process(): i32 { + try { + return this.inner.riskyOperation(); + } catch (e) { + return -1; + } + } +} + +class Inner { + riskyOperation(): i32 { + try { + throw new Error("inner error"); + } catch (e) { + throw new Error("wrapped error"); + } + return 0; + } +} + +let outer = new Outer(); +assert(outer.process() == -1); + +// Array operations with exceptions +function testArrayWithExceptions(): i32 { + let arr = new Array(3); + arr[0] = 1; + arr[1] = 2; + arr[2] = 3; + + let sum: i32 = 0; + try { + for (let i = 0; i < arr.length; i++) { + sum += arr[i]; + if (sum > 5) { + throw new Error("sum exceeded"); + } + } + } catch (e) { + return sum; // Should be 6 (1+2+3) + } + return 0; +} +assert(testArrayWithExceptions() == 6); + +// Multiple catch scenarios with rethrow +let rethrowFinallyRan = false; +function innerRethrow(): void { + try { + throw new Error("original"); + } catch (e) { + rethrowFinallyRan = false; + throw new Error("rethrown: " + (e as Error).message); + } finally { + rethrowFinallyRan = true; + } +} + +function testRethrowWithFinally(): i32 { + rethrowFinallyRan = false; + try { + innerRethrow(); + } catch (e) { + // Check that finally ran even during rethrow + return rethrowFinallyRan ? 1 : 0; + } + return 0; +} +assert(testRethrowWithFinally() == 1); + +// State machine with exceptions +class StateMachine { + state: i32 = 0; + errorState: bool = false; + + transition(newState: i32): void { + try { + if (newState < 0) { + throw new Error("invalid state"); + } + this.state = newState; + } catch (e) { + this.errorState = true; + this.state = -1; + } + } + + reset(): void { + try { + this.state = 0; + this.errorState = false; + } finally { + // Cleanup any resources + } + } +} + +let sm = new StateMachine(); +sm.transition(1); +assert(sm.state == 1); +assert(sm.errorState == false); + +sm.transition(-5); +assert(sm.state == -1); +assert(sm.errorState == true); + +sm.reset(); +assert(sm.state == 0); +assert(sm.errorState == false); + +// Deeply nested try-catch-finally +let deepNestingOrder: string = ""; + +function testDeepNesting(): i32 { + deepNestingOrder = ""; + try { + deepNestingOrder += "t1,"; + try { + deepNestingOrder += "t2,"; + try { + deepNestingOrder += "t3,"; + throw new Error("deep"); + } catch (e) { + deepNestingOrder += "c3,"; + throw new Error("rethrow"); + } finally { + deepNestingOrder += "f3,"; + } + } catch (e) { + deepNestingOrder += "c2,"; + } finally { + deepNestingOrder += "f2,"; + } + } catch (e) { + deepNestingOrder += "c1,"; + } finally { + deepNestingOrder += "f1,"; + } + return 1; +} +assert(testDeepNesting() == 1); +assert(deepNestingOrder == "t1,t2,t3,c3,f3,c2,f2,f1,"); + +// Counter class (alternative to closure) +class Counter { + count: i32 = 0; + + increment(): i32 { + try { + this.count++; + if (this.count > 3) { + throw new Error("max reached"); + } + return this.count; + } catch (e) { + return -1; + } + } +} + +let counter = new Counter(); +assert(counter.increment() == 1); +assert(counter.increment() == 2); +assert(counter.increment() == 3); +assert(counter.increment() == -1); // 4th call throws and catches + +// Return value from try block (not catch) +function testReturnFromTry(): i32 { + try { + return 42; + } catch (e) { + return -1; + } finally { + // This runs before the return from try + } +} +assert(testReturnFromTry() == 42); + +// Multiple returns with finally +let multiReturnFinallyCount = 0; +function testMultipleReturnsWithFinally(x: i32): i32 { + try { + if (x < 0) { + return -1; + } + if (x == 0) { + throw new Error("zero"); + } + if (x > 100) { + return 100; + } + return x; + } catch (e) { + return 0; + } finally { + multiReturnFinallyCount++; + } +} + +multiReturnFinallyCount = 0; +assert(testMultipleReturnsWithFinally(-5) == -1); +assert(multiReturnFinallyCount == 1); + +assert(testMultipleReturnsWithFinally(0) == 0); +assert(multiReturnFinallyCount == 2); + +assert(testMultipleReturnsWithFinally(50) == 50); +assert(multiReturnFinallyCount == 3); + +assert(testMultipleReturnsWithFinally(200) == 100); +assert(multiReturnFinallyCount == 4); + +// Return in finally overrides return in try +function testReturnInFinally(): i32 { + try { + return 1; // This return is overridden + } finally { + // eslint-disable-next-line no-unsafe-finally + return 2; // This return wins + } +} +assert(testReturnInFinally() == 2); + +// Return in finally overrides return in catch +function testReturnInFinallyOverridesCatch(): i32 { + try { + throw new Error("test"); + } catch (e) { + return 1; // This return is overridden + } finally { + // eslint-disable-next-line no-unsafe-finally + return 2; // This return wins + } +} +assert(testReturnInFinallyOverridesCatch() == 2); + +// Return in finally suppresses exception +let finallyReturnSuppressedExceptionRan = false; +function testReturnInFinallySuppressesException(): i32 { + try { + throw new Error("should be suppressed"); + } finally { + finallyReturnSuppressedExceptionRan = true; + // eslint-disable-next-line no-unsafe-finally + return 42; // This suppresses the exception + } +} +assert(testReturnInFinallySuppressesException() == 42); +assert(finallyReturnSuppressedExceptionRan); + +// ============================================================ +// Tests for catching abort() and runtime errors +// ============================================================ + +// Test catching abort() +function testCatchAbort(): bool { + let caught = false; + try { + abort("this should be catchable"); + } catch (e) { + caught = true; + // Verify we got an Error with the abort message + assert(e.message.includes("this should be catchable")); + } + return caught; +} +assert(testCatchAbort()); + +// Test catching runtime errors from __new (allocation too large) +function testCatchRuntimeError(): bool { + let caught = false; + try { + // Try to allocate an impossibly large object + // This should trigger an allocation error in the runtime + __new(usize.MAX_VALUE, idof()); + } catch (e) { + caught = true; + // Should have caught an allocation error + assert(e.message.length > 0); + } + return caught; +} +assert(testCatchRuntimeError()); + +// Test that abort in a function can be caught by the caller +function functionThatAborts(): void { + abort("abort from function"); +} + +function testCatchAbortFromFunction(): bool { + let caught = false; + try { + functionThatAborts(); + } catch (e) { + caught = true; + assert(e.message.includes("abort from function")); + } + return caught; +} +assert(testCatchAbortFromFunction()); + +// Test catch variable is properly typed as Error +function testCatchVariableType(): bool { + try { + throw new Error("type test"); + } catch (e) { + // e should be typed as Error, so we can access message directly + let msg: string = e.message; + return msg == "type test"; + } + return false; +} +assert(testCatchVariableType()); + +// Test catching custom Error subclass (use existing CustomError class) +function testCatchCustomError2(): bool { + try { + throw new CustomError("custom error 2", 99); + } catch (e) { + // e is typed as Error, need to cast to access code + let custom = e as CustomError; + return custom.message == "custom error 2" && custom.code == 99; + } + return false; +} +assert(testCatchCustomError2()); diff --git a/tests/compiler/exportstar-rereexport.debug.wat b/tests/compiler/exportstar-rereexport.debug.wat index 26289418ed..4466b0ec94 100644 --- a/tests/compiler/exportstar-rereexport.debug.wat +++ b/tests/compiler/exportstar-rereexport.debug.wat @@ -4,17 +4,18 @@ (type $2 (func)) (type $3 (func (param i32 i32) (result i32))) (type $4 (func (param i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) (global $exports/Car.TIRES i32 (i32.const 4)) (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) (global $exports/outer.inner.a i32 (i32.const 42)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -26,6 +27,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -264,7 +266,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2293,76 +2295,6 @@ ) (func $export-default/theDefault ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - global.get $rereexport/car - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $rereexport/exportsNamespaceCar - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $reexport/car - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $exports/Car - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:exportstar-rereexport ) @@ -2379,6 +2311,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $exports/Car#constructor (param $this i32) (param $doors i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2654,4 +2618,74 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $rereexport/car + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $rereexport/exportsNamespaceCar + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $reexport/car + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $exports/Car + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/exportstar-rereexport.release.wat b/tests/compiler/exportstar-rereexport.release.wat index 29956c7614..a955bdf03b 100644 --- a/tests/compiler/exportstar-rereexport.release.wat +++ b/tests/compiler/exportstar-rereexport.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -47,6 +47,41 @@ (export "renamed_default" (func $export-default/theDefault)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1560 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -85,7 +120,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$120 + block $__inlined_func$~lib/rt/itcms/Object#unlink$121 local.get $1 i32.load offset=4 i32.const -4 @@ -109,7 +144,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$120 + br $__inlined_func$~lib/rt/itcms/Object#unlink$121 end local.get $1 i32.load offset=8 @@ -152,7 +187,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/extends-baseaggregate.debug.wat b/tests/compiler/extends-baseaggregate.debug.wat index 9842604142..8c800f94c9 100644 --- a/tests/compiler/extends-baseaggregate.debug.wat +++ b/tests/compiler/extends-baseaggregate.debug.wat @@ -4,14 +4,15 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 f64))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $extends-baseaggregate/poolB i32 (i32.const 64)) (global $extends-baseaggregate/poolA i32 (i32.const 144)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -23,6 +24,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -234,7 +236,7 @@ if i32.const 384 i32.const 448 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2412,172 +2414,6 @@ local.get $length_ i32.store offset=12 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $extends-baseaggregate/poolB - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $extends-baseaggregate/poolA - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 384 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 592 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 192 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $extends-baseaggregate/B1~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $extends-baseaggregate/A1~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=16 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $extends-baseaggregate/C1~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $extends-baseaggregate/A2~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $extends-baseaggregate/A1~visit - ) - (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/array/Array#get:length_ (param $this i32) (result i32) - local.get $this - i32.load offset=12 - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/array/Array - block $extends-baseaggregate/A2 - block $extends-baseaggregate/C1 - block $extends-baseaggregate/A1 - block $extends-baseaggregate/B1 - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $extends-baseaggregate/B1 $extends-baseaggregate/A1 $extends-baseaggregate/C1 $extends-baseaggregate/A2 $~lib/array/Array $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $extends-baseaggregate/B1~visit - return - end - local.get $0 - local.get $1 - call $extends-baseaggregate/A1~visit - return - end - local.get $0 - local.get $1 - call $extends-baseaggregate/C1~visit - return - end - local.get $0 - local.get $1 - call $extends-baseaggregate/A2~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:extends-baseaggregate ) @@ -2594,6 +2430,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $extends-baseaggregate/A1#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2799,6 +2667,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -2857,6 +2729,10 @@ i32.add local.get $value i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -2927,6 +2803,200 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $extends-baseaggregate/poolB + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $extends-baseaggregate/poolA + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 384 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 592 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 192 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $extends-baseaggregate/B1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $extends-baseaggregate/A1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=16 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $extends-baseaggregate/C1~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $extends-baseaggregate/A2~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $extends-baseaggregate/A1~visit + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $extends-baseaggregate/A2 + block $extends-baseaggregate/C1 + block $extends-baseaggregate/A1 + block $extends-baseaggregate/B1 + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $extends-baseaggregate/B1 $extends-baseaggregate/A1 $extends-baseaggregate/C1 $extends-baseaggregate/A2 $~lib/array/Array $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $extends-baseaggregate/B1~visit + return + end + local.get $0 + local.get $1 + call $extends-baseaggregate/A1~visit + return + end + local.get $0 + local.get $1 + call $extends-baseaggregate/C1~visit + return + end + local.get $0 + local.get $1 + call $extends-baseaggregate/A2~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) @@ -2940,6 +3010,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -3010,6 +3084,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -3067,32 +3145,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/extends-baseaggregate.release.wat b/tests/compiler/extends-baseaggregate.release.wat index 7ece00a053..a784995b63 100644 --- a/tests/compiler/extends-baseaggregate.release.wat +++ b/tests/compiler/extends-baseaggregate.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -46,6 +46,41 @@ (data $14.1 (i32.const 1732) "\02A\00\00\02A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1740 + i32.lt_s + if + i32.const 34528 + i32.const 34576 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -858,7 +893,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$142 + block $__inlined_func$~lib/rt/itcms/Object#unlink$143 local.get $0 i32.load offset=4 i32.const -4 @@ -882,7 +917,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$142 + br $__inlined_func$~lib/rt/itcms/Object#unlink$143 end local.get $0 i32.load offset=8 @@ -925,7 +960,7 @@ if i32.const 1408 i32.const 1472 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1674,7 +1709,7 @@ global.get $~lib/memory/__stack_pointer i32.const 1168 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$141 + block $__inlined_func$~lib/rt/itcms/__renew$133 i32.const 1073741820 local.get $0 i32.const 1 @@ -1717,7 +1752,7 @@ i32.store offset=16 local.get $0 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$141 + br $__inlined_func$~lib/rt/itcms/__renew$133 end local.get $3 local.get $2 diff --git a/tests/compiler/extends-recursive.debug.wat b/tests/compiler/extends-recursive.debug.wat index a4d78b0d14..3dfe683a9d 100644 --- a/tests/compiler/extends-recursive.debug.wat +++ b/tests/compiler/extends-recursive.debug.wat @@ -8,7 +8,8 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -224,7 +226,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2343,79 +2345,6 @@ call $extends-recursive/Child#constructor drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $extends-recursive/Child~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $extends-recursive/Parent~visit - ) - (func $extends-recursive/Parent~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $extends-recursive/Parent - block $extends-recursive/Child - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $extends-recursive/Child $extends-recursive/Parent $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $extends-recursive/Child~visit - return - end - local.get $0 - local.get $1 - call $extends-recursive/Parent~visit - return - end - unreachable - ) (func $~start call $start:extends-recursive ) @@ -2432,6 +2361,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $extends-recursive/Parent#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2544,4 +2505,77 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $extends-recursive/Child~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $extends-recursive/Parent~visit + ) + (func $extends-recursive/Parent~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $extends-recursive/Parent + block $extends-recursive/Child + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $extends-recursive/Child $extends-recursive/Parent $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $extends-recursive/Child~visit + return + end + local.get $0 + local.get $1 + call $extends-recursive/Parent~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/extends-recursive.release.wat b/tests/compiler/extends-recursive.release.wat index 4ae0ed92db..9fefb669d4 100644 --- a/tests/compiler/extends-recursive.release.wat +++ b/tests/compiler/extends-recursive.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -32,6 +32,41 @@ (data $8 (i32.const 1440) "\06\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1468 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -70,7 +105,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$116 + block $__inlined_func$~lib/rt/itcms/Object#unlink$117 local.get $0 i32.load offset=4 i32.const -4 @@ -94,7 +129,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$116 + br $__inlined_func$~lib/rt/itcms/Object#unlink$117 end local.get $0 i32.load offset=8 @@ -137,7 +172,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/features/gc.debug.wat b/tests/compiler/features/gc.debug.wat index 8f24f21139..e2c0c9d58a 100644 --- a/tests/compiler/features/gc.debug.wat +++ b/tests/compiler/features/gc.debug.wat @@ -1,7 +1,8 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (type $1) (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (type $1) (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $features/gc/globalFunc funcref (ref.null nofunc)) (global $features/gc/globalExtern externref (ref.null noextern)) (global $features/gc/globalAny anyref (ref.null none)) @@ -62,4 +63,49 @@ global.set $~started call $start:features/gc ) + (func $~stack_check (type $0) + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (type $1) (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/features/reference-types.debug.wat b/tests/compiler/features/reference-types.debug.wat index 77709d2bd9..179a3f1dc4 100644 --- a/tests/compiler/features/reference-types.debug.wat +++ b/tests/compiler/features/reference-types.debug.wat @@ -1,12 +1,13 @@ (module (type $0 (func)) (type $1 (func (result externref))) - (type $2 (func (param externref) (result externref))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param externref) (result externref))) (import "reference-types" "somethingReal" (func $features/reference-types/somethingReal (result externref))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "reference-types" "somethingNull" (func $features/reference-types/somethingNull (result externref))) (import "reference-types" "external" (func $features/reference-types/external (param externref) (result externref))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $features/reference-types/funcGlobal (mut funcref) (ref.null nofunc)) (global $features/reference-types/funcGlobalInit (mut funcref) (ref.null nofunc)) (global $features/reference-types/anyGlobal (mut externref) (ref.null noextern)) @@ -337,4 +338,49 @@ (func $~start call $start:features/reference-types ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33008 + i32.const 33056 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/features/reference-types.release.wat b/tests/compiler/features/reference-types.release.wat index 40fd3e75ca..7838755b2f 100644 --- a/tests/compiler/features/reference-types.release.wat +++ b/tests/compiler/features/reference-types.release.wat @@ -1,17 +1,18 @@ (module - (type $0 (func (result externref))) - (type $1 (func (param externref) (result externref))) - (type $2 (func)) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32 i32))) + (type $1 (func (result externref))) + (type $2 (func (param externref) (result externref))) + (type $3 (func)) (import "reference-types" "somethingReal" (func $features/reference-types/somethingReal (result externref))) (import "reference-types" "external" (func $features/reference-types/external (param externref) (result externref))) (import "reference-types" "somethingNull" (func $features/reference-types/somethingNull (result externref))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $features/reference-types/funcGlobal (mut funcref) (ref.null nofunc)) (global $features/reference-types/a externref (ref.null noextern)) (global $features/reference-types/b funcref (ref.null nofunc)) (global $features/reference-types/nonNullFunc (mut funcref) (ref.null nofunc)) (global $features/reference-types/nonNullReal (mut externref) (ref.null noextern)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34012)) (memory $0 1) (data $0 (i32.const 1036) "L") (data $0.1 (i32.const 1048) "\02\00\00\006\00\00\00f\00e\00a\00t\00u\00r\00e\00s\00/\00r\00e\00f\00e\00r\00e\00n\00c\00e\00-\00t\00y\00p\00e\00s\00.\00t\00s") @@ -28,6 +29,41 @@ (export "nonNullReal" (global $features/reference-types/nonNullReal)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1244 + i32.lt_s + if + i32.const 34032 + i32.const 34080 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start (local $0 externref) call $features/reference-types/somethingReal diff --git a/tests/compiler/field-initialization.debug.wat b/tests/compiler/field-initialization.debug.wat index e5375a2469..0679c5279c 100644 --- a/tests/compiler/field-initialization.debug.wat +++ b/tests/compiler/field-initialization.debug.wat @@ -9,7 +9,8 @@ (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -235,7 +237,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2689,364 +2691,221 @@ local.get $this i32.load ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 512 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit + (func $~start + call $start:field-initialization ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33664 + i32.const 33712 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $field-initialization/Ref_Init~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + (func $field-initialization/Value_Init#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Nullable_Init~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Nullable~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + i32.const 1 + call $field-initialization/Value_Init#set:a + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit ) - (func $field-initialization/Ref_Init_Ctor~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + (func $field-initialization/Value#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Ref_Ctor_Init~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Ref_Ctor_Param~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + i32.const 0 + call $field-initialization/Value#set:a + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit ) - (func $field-initialization/Nullable_Ctor~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + (func $field-initialization/Ref_Init#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Nullable_Init_Ctor~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Nullable_Ctor_Init~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + i32.const 0 + i32.const 0 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Inherit~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store offset=8 local.get $1 - call $field-initialization/Inherit_Base~visit - ) - (func $field-initialization/Inherit_Base~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Inherit_Ctor~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $field-initialization/Inherit_Base~visit - ) - (func $field-initialization/SomeObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=4 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/SomeOtherObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $field-initialization/SomeObject~visit - local.get $0 - i32.load offset=8 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Flow_Balanced~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Ref_Init_InlineCtor~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $field-initialization/Ref_InlineCtor_Init~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $field-initialization/Ref_InlineCtor_Init - block $field-initialization/Ref_Init_InlineCtor - block $field-initialization/Flow_Balanced - block $field-initialization/SomeOtherObject - block $field-initialization/SomeObject - block $field-initialization/Inherit_Ctor - block $field-initialization/Inherit_Base - block $field-initialization/Inherit - block $field-initialization/Nullable_Ctor_Init - block $field-initialization/Nullable_Init_Ctor - block $field-initialization/Nullable_Ctor - block $field-initialization/Ref_Ctor_Param - block $field-initialization/Ref_Ctor_Init - block $field-initialization/Ref_Init_Ctor - block $field-initialization/Value_Ctor_Init - block $field-initialization/Value_Init_Ctor - block $field-initialization/Value_Ctor - block $field-initialization/Nullable - block $field-initialization/Nullable_Init - block $field-initialization/Ref_Init - block $field-initialization/Value - block $field-initialization/Value_Init - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $field-initialization/Value_Init $field-initialization/Value $field-initialization/Ref_Init $field-initialization/Nullable_Init $field-initialization/Nullable $field-initialization/Value_Ctor $field-initialization/Value_Init_Ctor $field-initialization/Value_Ctor_Init $field-initialization/Ref_Init_Ctor $field-initialization/Ref_Ctor_Init $field-initialization/Ref_Ctor_Param $field-initialization/Nullable_Ctor $field-initialization/Nullable_Init_Ctor $field-initialization/Nullable_Ctor_Init $field-initialization/Inherit $field-initialization/Inherit_Base $field-initialization/Inherit_Ctor $field-initialization/SomeObject $field-initialization/SomeOtherObject $field-initialization/Flow_Balanced $field-initialization/Ref_Init_InlineCtor $field-initialization/Ref_InlineCtor_Init $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_Init~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Nullable_Init~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Nullable~visit - return - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_Init_Ctor~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_Ctor_Init~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_Ctor_Param~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Nullable_Ctor~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Nullable_Init_Ctor~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Nullable_Ctor_Init~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Inherit~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Inherit_Base~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Inherit_Ctor~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/SomeObject~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/SomeOtherObject~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Flow_Balanced~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_Init_InlineCtor~visit - return - end - local.get $0 - local.get $1 - call $field-initialization/Ref_InlineCtor_Init~visit - return - end - unreachable - ) - (func $~start - call $start:field-initialization - ) - (func $~stack_check + call $field-initialization/Ref_Init#set:a + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33664 - i32.const 33712 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $field-initialization/Value_Init#constructor (param $this i32) (result i32) + (func $field-initialization/Nullable_Init#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 local.get $this i32.eqz if global.get $~lib/memory/__stack_pointer i32.const 4 - i32.const 4 + i32.const 7 call $~lib/rt/itcms/__new local.tee $this i32.store @@ -3067,17 +2926,24 @@ local.get $1 i32.store offset=4 local.get $1 - i32.const 1 - call $field-initialization/Value_Init#set:a + i32.const 0 + i32.const 0 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + call $field-initialization/Nullable_Init#set:a local.get $this local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $field-initialization/Value#constructor (param $this i32) (result i32) + (func $field-initialization/Nullable#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -3092,165 +2958,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 4 - i32.const 5 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $~lib/object/Object#constructor - local.tee $this - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - call $field-initialization/Value#set:a - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $field-initialization/Ref_Init#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $~lib/object/Object#constructor - local.tee $this - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 0 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $field-initialization/Ref_Init#set:a - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $field-initialization/Nullable_Init#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $~lib/object/Object#constructor - local.tee $this - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 0 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $field-initialization/Nullable_Init#set:a - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $field-initialization/Nullable#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 8 + i32.const 8 call $~lib/rt/itcms/__new local.tee $this i32.store @@ -5152,4 +4860,330 @@ local.get $3 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 512 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $field-initialization/Ref_Init~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Nullable_Init~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Nullable~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Ref_Init_Ctor~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Ref_Ctor_Init~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Ref_Ctor_Param~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Nullable_Ctor~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Nullable_Init_Ctor~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Nullable_Ctor_Init~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Inherit~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $field-initialization/Inherit_Base~visit + ) + (func $field-initialization/Inherit_Base~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Inherit_Ctor~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $field-initialization/Inherit_Base~visit + ) + (func $field-initialization/SomeObject~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/SomeOtherObject~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $field-initialization/SomeObject~visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Flow_Balanced~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Ref_Init_InlineCtor~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $field-initialization/Ref_InlineCtor_Init~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $field-initialization/Ref_InlineCtor_Init + block $field-initialization/Ref_Init_InlineCtor + block $field-initialization/Flow_Balanced + block $field-initialization/SomeOtherObject + block $field-initialization/SomeObject + block $field-initialization/Inherit_Ctor + block $field-initialization/Inherit_Base + block $field-initialization/Inherit + block $field-initialization/Nullable_Ctor_Init + block $field-initialization/Nullable_Init_Ctor + block $field-initialization/Nullable_Ctor + block $field-initialization/Ref_Ctor_Param + block $field-initialization/Ref_Ctor_Init + block $field-initialization/Ref_Init_Ctor + block $field-initialization/Value_Ctor_Init + block $field-initialization/Value_Init_Ctor + block $field-initialization/Value_Ctor + block $field-initialization/Nullable + block $field-initialization/Nullable_Init + block $field-initialization/Ref_Init + block $field-initialization/Value + block $field-initialization/Value_Init + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $field-initialization/Value_Init $field-initialization/Value $field-initialization/Ref_Init $field-initialization/Nullable_Init $field-initialization/Nullable $field-initialization/Value_Ctor $field-initialization/Value_Init_Ctor $field-initialization/Value_Ctor_Init $field-initialization/Ref_Init_Ctor $field-initialization/Ref_Ctor_Init $field-initialization/Ref_Ctor_Param $field-initialization/Nullable_Ctor $field-initialization/Nullable_Init_Ctor $field-initialization/Nullable_Ctor_Init $field-initialization/Inherit $field-initialization/Inherit_Base $field-initialization/Inherit_Ctor $field-initialization/SomeObject $field-initialization/SomeOtherObject $field-initialization/Flow_Balanced $field-initialization/Ref_Init_InlineCtor $field-initialization/Ref_InlineCtor_Init $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_Init~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Nullable_Init~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Nullable~visit + return + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_Init_Ctor~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_Ctor_Init~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_Ctor_Param~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Nullable_Ctor~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Nullable_Init_Ctor~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Nullable_Ctor_Init~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Inherit~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Inherit_Base~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Inherit_Ctor~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/SomeObject~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/SomeOtherObject~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Flow_Balanced~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_Init_InlineCtor~visit + return + end + local.get $0 + local.get $1 + call $field-initialization/Ref_InlineCtor_Init~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/field-initialization.release.wat b/tests/compiler/field-initialization.release.wat index 187b718ade..d181bdc4ca 100644 --- a/tests/compiler/field-initialization.release.wat +++ b/tests/compiler/field-initialization.release.wat @@ -7,7 +7,7 @@ (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -50,6 +50,41 @@ (data $16.1 (i32.const 1832) " \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1900 + i32.lt_s + if + i32.const 34688 + i32.const 34736 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -563,7 +598,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$118 + block $__inlined_func$~lib/util/string/compareImpl$114 loop $while-continue|1 local.get $0 local.tee $3 @@ -583,7 +618,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$118 + br_if $__inlined_func$~lib/util/string/compareImpl$114 local.get $2 i32.const 2 i32.add @@ -1144,7 +1179,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$241 + block $__inlined_func$~lib/rt/itcms/Object#unlink$242 local.get $0 i32.load offset=4 i32.const -4 @@ -1168,7 +1203,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$241 + br $__inlined_func$~lib/rt/itcms/Object#unlink$242 end local.get $0 i32.load offset=8 @@ -1211,7 +1246,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/field.debug.wat b/tests/compiler/field.debug.wat index e2ca4b3acc..634c225f93 100644 --- a/tests/compiler/field.debug.wat +++ b/tests/compiler/field.debug.wat @@ -10,7 +10,8 @@ (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) (type $10 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,9 +23,11 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~lib/rt/__rtti_base i32 (i32.const 448)) (global $~lib/memory/__data_end i32 (i32.const 480)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33248)) @@ -227,7 +230,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2409,6 +2412,226 @@ call $field/testNoStaticConflict call $~lib/rt/itcms/__collect ) + (func $~start + call $start:field + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33280 + i32.const 33328 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $field/NoStaticConflict#constructor (param $this i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/object/Object#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 2 + i32.const 5 + i32.const 432 + call $~lib/rt/__newArray + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $field/NoStaticConflict#set:a + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $field/testNoStaticConflict + (local $inst i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + call $field/NoStaticConflict#constructor + local.tee $inst + i32.store + local.get $inst + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $field/NoStaticConflict.a + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 224 @@ -2515,109 +2738,6 @@ end unreachable ) - (func $~start - call $start:field - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33280 - i32.const 33328 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $field/NoStaticConflict#constructor (param $this i32) (result i32) - (local $1 i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/object/Object#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.const 2 - i32.const 5 - i32.const 432 - call $~lib/rt/__newArray - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - local.get $2 - call $field/NoStaticConflict#set:a - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $field/testNoStaticConflict - (local $inst i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - call $field/NoStaticConflict#constructor - local.tee $inst - i32.store - local.get $inst - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $field/NoStaticConflict.a - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) @@ -2631,6 +2751,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -2698,6 +2822,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -2714,85 +2842,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) ) diff --git a/tests/compiler/field.release.wat b/tests/compiler/field.release.wat index da05c7bb6a..50bb791786 100644 --- a/tests/compiler/field.release.wat +++ b/tests/compiler/field.release.wat @@ -2,11 +2,11 @@ (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -35,6 +35,41 @@ (data $9.1 (i32.const 1496) "\02A\00\00\02\t") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1504 + i32.lt_s + if + i32.const 34304 + i32.const 34352 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -1048,7 +1083,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$127 + block $__inlined_func$~lib/rt/itcms/Object#unlink$128 local.get $0 i32.load offset=4 i32.const -4 @@ -1072,7 +1107,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$127 + br $__inlined_func$~lib/rt/itcms/Object#unlink$128 end local.get $0 i32.load offset=8 @@ -1115,7 +1150,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/for.debug.wat b/tests/compiler/for.debug.wat index fd03f109f2..1c2ce26143 100644 --- a/tests/compiler/for.debug.wat +++ b/tests/compiler/for.debug.wat @@ -4,12 +4,13 @@ (type $2 (func (param i32 i32))) (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $for/ran (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -613,7 +615,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3018,55 +3020,6 @@ end call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $for/Ref - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $for/Ref $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:for ) @@ -3083,6 +3036,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $for/Ref#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3149,4 +3134,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $for/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $for/Ref $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/for.release.wat b/tests/compiler/for.release.wat index d638bb953f..4fdffd4e72 100644 --- a/tests/compiler/for.release.wat +++ b/tests/compiler/for.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $9 (i32.const 1472) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1496 + i32.lt_s + if + i32.const 34288 + i32.const 34336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $for/Ref#constructor (result i32) (local $0 i32) (local $1 i32) @@ -396,7 +431,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$128 + block $__inlined_func$~lib/rt/itcms/Object#unlink$129 local.get $1 i32.load offset=4 i32.const -4 @@ -420,7 +455,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$128 + br $__inlined_func$~lib/rt/itcms/Object#unlink$129 end local.get $1 i32.load offset=8 @@ -463,7 +498,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/function-call.debug.wat b/tests/compiler/function-call.debug.wat index d533f74061..6714967dc1 100644 --- a/tests/compiler/function-call.debug.wat +++ b/tests/compiler/function-call.debug.wat @@ -4,16 +4,17 @@ (type $2 (func)) (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $function-call/fnVoid (mut i32) (i32.const 32)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $function-call/faVoid (mut i32) (i32.const 64)) (global $function-call/fnRet (mut i32) (i32.const 96)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $function-call/faRet (mut i32) (i32.const 192)) (global $function-call/fnThis (mut i32) (i32.const 224)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -27,6 +28,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -35,6 +37,7 @@ (global $~lib/memory/__data_end i32 (i32.const 780)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33548)) (global $~lib/memory/__heap_base i32 (i32.const 33548)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") @@ -261,7 +264,7 @@ if i32.const 448 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2293,152 +2296,6 @@ i32.add return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $function-call/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28this:i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28this:i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:i32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28this:function-call/Foo%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28this:function-call/Foo%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:function-call/Foo%29=>void>#__visit - ) - (func $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32> - block $~lib/function/Function<%28this:function-call/Foo%29=>void> - block $function-call/Foo - block $~lib/function/Function<%28this:i32%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%29=>i32> - block $~lib/function/Function<%28%29=>void> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28this:i32%29=>i32> $function-call/Foo $~lib/function/Function<%28this:function-call/Foo%29=>void> $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:i32%29=>i32>~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:function-call/Foo%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>~visit - return - end - unreachable - ) (func $~start call $start:function-call ) @@ -2455,6 +2312,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $function-call/Foo#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2626,7 +2515,7 @@ global.set $~argumentsLength i32.const 720 i32.load - call_indirect (type $6) + call_indirect (type $7) i32.const 3 i32.eq i32.eqz @@ -2643,6 +2532,180 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $function-call/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28this:i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28this:i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28this:function-call/Foo%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28this:function-call/Foo%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:function-call/Foo%29=>void>#__visit + ) + (func $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32> + block $~lib/function/Function<%28this:function-call/Foo%29=>void> + block $function-call/Foo + block $~lib/function/Function<%28this:i32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28this:i32%29=>i32> $function-call/Foo $~lib/function/Function<%28this:function-call/Foo%29=>void> $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:i32%29=>i32>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:function-call/Foo%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28this:function-call/Foo%2Ci32%2Ci32%29=>i32>~visit + return + end + unreachable + ) (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2653,6 +2716,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2677,6 +2744,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2701,6 +2772,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2725,6 +2800,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2749,6 +2828,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2763,32 +2846,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/function-call.release.wat b/tests/compiler/function-call.release.wat index ae676fe060..037bffc76b 100644 --- a/tests/compiler/function-call.release.wat +++ b/tests/compiler/function-call.release.wat @@ -3,12 +3,12 @@ (type $1 (func (param i32) (result i32))) (type $2 (func (param i32))) (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32 i32) (result i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -56,6 +56,41 @@ (elem $0 (i32.const 1) $start:function-call~anonymous|0 $start:function-call~anonymous|0 $start:function-call~anonymous|2 $start:function-call~anonymous|2 $start:function-call~fn2|4 $function-call/Foo#fnVoid $start:function-call~fn2|4 $function-call/Foo#fnRet) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1804 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -94,7 +129,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$115 + block $__inlined_func$~lib/rt/itcms/Object#unlink$116 local.get $1 i32.load offset=4 i32.const -4 @@ -118,7 +153,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$115 + br $__inlined_func$~lib/rt/itcms/Object#unlink$116 end local.get $1 i32.load offset=8 @@ -161,7 +196,7 @@ if i32.const 1472 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1362,7 +1397,7 @@ i32.const 2 i32.const 1744 i32.load - call_indirect (type $5) + call_indirect (type $6) i32.const 3 i32.ne if diff --git a/tests/compiler/function-expression.debug.wat b/tests/compiler/function-expression.debug.wat index 8758a369fa..a9f1ae2c42 100644 --- a/tests/compiler/function-expression.debug.wat +++ b/tests/compiler/function-expression.debug.wat @@ -8,9 +8,10 @@ (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $function-expression/f1 (mut i32) (i32.const 32)) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 128)) (global $function-expression/f3 (mut i32) (i32.const 160)) (global $function-expression/f4 (mut i32) (i32.const 192)) @@ -26,6 +27,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -33,6 +35,7 @@ (global $~lib/memory/__data_end i32 (i32.const 1132)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33900)) (global $~lib/memory/__heap_base i32 (i32.const 33900)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00,\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") @@ -419,7 +422,7 @@ if i32.const 768 i32.const 832 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2567,158 +2570,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 768 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 576 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit - ) - (func $function-expression/FieldClass~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $function-expression/FieldClass - block $~lib/function/Function<%28%29=>%28i32%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%29=>i32> - block $~lib/function/Function<%28%29=>i32> - block $~lib/function/Function<%28%29=>void> - block $~lib/function/Function<%28i32%29=>i32> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28%29=>%28i32%29=>i32> $function-expression/FieldClass $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $function-expression/FieldClass~visit - return - end - unreachable - ) (func $~start call $start:function-expression ) @@ -2735,6 +2586,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $function-expression/FieldClass#constructor (param $this i32) (param $fieldFunc i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -3053,8 +2936,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $start:function-expression~anonymous|7 (result i32) + (local $myFunc i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3063,22 +2947,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 448 + local.tee $myFunc i32.store - local.get $2 - call $~lib/function/Function<%28i32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $myFunc + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 + return ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $function-expression/testLocal~anonymous|0 (result i32) + (local $myFunc i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3087,22 +2971,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 512 + local.tee $myFunc i32.store - local.get $2 - call $~lib/function/Function<%28%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $myFunc + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 + return ) - (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $function-expression/testField~anonymous|0 (result i32) + (local $myFunc i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3111,21 +2995,172 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 976 + local.tee $myFunc i32.store - local.get $2 - call $~lib/function/Function<%28%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $myFunc + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 + return ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 768 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 576 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit + ) + (func $function-expression/FieldClass~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $function-expression/FieldClass + block $~lib/function/Function<%28%29=>%28i32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28%29=>i32> + block $~lib/function/Function<%28%29=>void> + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $~lib/function/Function<%28%29=>void> $~lib/function/Function<%28%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28%29=>%28i32%29=>i32> $function-expression/FieldClass $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $function-expression/FieldClass~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3135,13 +3170,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + call $~lib/function/Function<%28i32%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -3149,7 +3188,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3159,13 +3198,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env + call $~lib/function/Function<%28%29=>void>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -3173,9 +3216,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $start:function-expression~anonymous|7 (result i32) - (local $myFunc i32) - (local $1 i32) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3184,22 +3226,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 448 - local.tee $myFunc + local.get $2 i32.store - local.get $myFunc - local.set $1 + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) - (func $function-expression/testLocal~anonymous|0 (result i32) - (local $myFunc i32) - (local $1 i32) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3208,22 +3254,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 512 - local.tee $myFunc + local.get $2 i32.store - local.get $myFunc - local.set $1 + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) - (func $function-expression/testField~anonymous|0 (result i32) - (local $myFunc i32) - (local $1 i32) + (func $~lib/function/Function<%28%29=>%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3232,17 +3282,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 976 - local.tee $myFunc + local.get $2 i32.store - local.get $myFunc - local.set $1 + local.get $2 + call $~lib/function/Function<%28%29=>%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) ) diff --git a/tests/compiler/function-expression.release.wat b/tests/compiler/function-expression.release.wat index 560499a4a1..7def922a65 100644 --- a/tests/compiler/function-expression.release.wat +++ b/tests/compiler/function-expression.release.wat @@ -4,10 +4,10 @@ (type $2 (func (param i32) (result i32))) (type $3 (func)) (type $4 (func (param i32))) - (type $5 (func (param i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -76,6 +76,41 @@ (export "semanticallyAnonymous" (func $function-expression/semanticallyAnonymous)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2156 + i32.lt_s + if + i32.const 34944 + i32.const 34992 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -518,7 +553,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$133 + block $__inlined_func$~lib/rt/itcms/Object#unlink$134 local.get $0 i32.load offset=4 i32.const -4 @@ -542,7 +577,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$133 + br $__inlined_func$~lib/rt/itcms/Object#unlink$134 end local.get $0 i32.load offset=8 @@ -585,7 +620,7 @@ if i32.const 1792 i32.const 1856 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/function-types.debug.wat b/tests/compiler/function-types.debug.wat index 06b04a6227..ed8e7a81fd 100644 --- a/tests/compiler/function-types.debug.wat +++ b/tests/compiler/function-types.debug.wat @@ -3,12 +3,13 @@ (type $1 (func (result i32))) (type $2 (func (param i32 i32 i32) (result i32))) (type $3 (func)) - (type $4 (func (param i64 i64) (result i64))) - (type $5 (func (param f64 f64) (result f64))) - (type $6 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i64 i64) (result i64))) + (type $6 (func (param f64 f64) (result f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 204)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32972)) @@ -105,6 +106,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $function-types/makeAndAdd@varargs (param $a i32) (param $b i32) (param $adder i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer @@ -184,7 +217,7 @@ global.set $~argumentsLength global.get $function-types/i64Adder i32.load - call_indirect (type $4) + call_indirect (type $5) i64.const 30 i64.eq i32.eqz @@ -202,7 +235,7 @@ global.set $~argumentsLength call $function-types/makeAdder i32.load - call_indirect (type $5) + call_indirect (type $6) f64.const 4 f64.eq i32.eqz diff --git a/tests/compiler/function-types.release.wat b/tests/compiler/function-types.release.wat index 5b3f80a227..2ad73191ea 100644 --- a/tests/compiler/function-types.release.wat +++ b/tests/compiler/function-types.release.wat @@ -2,9 +2,10 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func (param i64 i64) (result i64))) (type $2 (func (param f64 f64) (result f64))) - (type $3 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32))) (type $4 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33996)) (memory $0 1) @@ -22,6 +23,40 @@ (elem $0 (i32.const 1) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|0) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1228 + i32.lt_s + if + i32.const 34016 + i32.const 34064 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $function-types/makeAdder~anonymous|0 (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 @@ -54,7 +89,6 @@ i32.const 0 i32.const 1088 i32.const 11 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -69,7 +103,6 @@ i32.const 0 i32.const 1088 i32.const 15 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -84,7 +117,6 @@ i32.const 0 i32.const 1088 i32.const 17 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -103,7 +135,6 @@ i32.const 0 i32.const 1088 i32.const 23 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -118,7 +149,6 @@ i32.const 0 i32.const 1088 i32.const 29 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -136,7 +166,6 @@ i32.const 0 i32.const 1088 i32.const 35 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -172,7 +201,6 @@ i32.const 0 i32.const 1088 i32.const 41 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -190,7 +218,6 @@ i32.const 0 i32.const 1088 i32.const 42 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -203,7 +230,6 @@ i32.const 34016 i32.const 34064 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable ) diff --git a/tests/compiler/getter-call.debug.wat b/tests/compiler/getter-call.debug.wat index 9b5cc21b43..b809367a53 100644 --- a/tests/compiler/getter-call.debug.wat +++ b/tests/compiler/getter-call.debug.wat @@ -5,10 +5,11 @@ (type $3 (func)) (type $4 (func (result i32))) (type $5 (func (param i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -28,6 +30,7 @@ (global $~lib/memory/__data_end i32 (i32.const 476)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33244)) (global $~lib/memory/__heap_base i32 (i32.const 33244)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -227,7 +230,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2254,73 +2257,6 @@ i32.const 432 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28%29=>i32> - block $getter-call/C - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $getter-call/C $~lib/function/Function<%28%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>i32>~visit - return - end - unreachable - ) (func $~start memory.size i32.const 16 @@ -2353,6 +2289,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $getter-call/C#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2426,8 +2394,8 @@ local.get $1 return ) - (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2437,21 +2405,92 @@ i32.const 0 i32.store local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28%29=>i32> + block $getter-call/C + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $getter-call/C $~lib/function/Function<%28%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>i32>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2460,22 +2499,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/getter-call.release.wat b/tests/compiler/getter-call.release.wat index 9794ae6bb1..f9c76e5ce0 100644 --- a/tests/compiler/getter-call.release.wat +++ b/tests/compiler/getter-call.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -37,6 +37,41 @@ (export "test" (func $getter-call/test)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1500 + i32.lt_s + if + i32.const 34288 + i32.const 34336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -75,7 +110,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$115 + block $__inlined_func$~lib/rt/itcms/Object#unlink$116 local.get $1 i32.load offset=4 i32.const -4 @@ -99,7 +134,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$115 + br $__inlined_func$~lib/rt/itcms/Object#unlink$116 end local.get $1 i32.load offset=8 @@ -142,7 +177,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/getter-setter.debug.wat b/tests/compiler/getter-setter.debug.wat index 82ad196874..d0b38e3ca3 100644 --- a/tests/compiler/getter-setter.debug.wat +++ b/tests/compiler/getter-setter.debug.wat @@ -1,10 +1,11 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) (type $3 (func (param i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 76)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) (global $~lib/memory/__heap_base i32 (i32.const 32844)) @@ -69,4 +70,49 @@ (func $~start call $start:getter-setter ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/getter-setter.release.wat b/tests/compiler/getter-setter.release.wat index b626215eec..f59e6e31f7 100644 --- a/tests/compiler/getter-setter.release.wat +++ b/tests/compiler/getter-setter.release.wat @@ -1,20 +1,55 @@ (module - (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $getter-setter/Foo._bar (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00 \00\00\00g\00e\00t\00t\00e\00r\00-\00s\00e\00t\00t\00e\00r\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start global.get $getter-setter/Foo._bar if i32.const 0 i32.const 1056 i32.const 13 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/heap.debug.wat b/tests/compiler/heap.debug.wat index 3b82eebc93..618f37106d 100644 --- a/tests/compiler/heap.debug.wat +++ b/tests/compiler/heap.debug.wat @@ -1,16 +1,17 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func)) - (type $4 (func (param i32 i32 i32) (result i32))) - (type $5 (func (param i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $2 (func)) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32) (result i32))) + (type $6 (func (param i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (param i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $heap/ptr (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 140)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32908)) @@ -1747,4 +1748,49 @@ (func $~start call $start:heap ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32928 + i32.const 32976 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/heap.release.wat b/tests/compiler/heap.release.wat index cf51676de3..012ca6f7f9 100644 --- a/tests/compiler/heap.release.wat +++ b/tests/compiler/heap.release.wat @@ -1,14 +1,15 @@ (module (type $0 (func (param i32 i32) (result i32))) - (type $1 (func (param i32 i32))) - (type $2 (func)) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32))) + (type $3 (func)) + (type $4 (func (param i32) (result i32))) (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $heap/ptr (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33932)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") @@ -16,6 +17,41 @@ (data $1.1 (i32.const 1112) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1164 + i32.lt_s + if + i32.const 33952 + i32.const 34000 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -1050,7 +1086,7 @@ local.get $0 call $~lib/rt/tlsf/checkUsedBlock local.set $0 - block $__inlined_func$~lib/rt/tlsf/reallocateBlock$53 + block $__inlined_func$~lib/rt/tlsf/reallocateBlock$54 i32.const 32 call $~lib/rt/tlsf/prepareSize local.tee $5 @@ -1066,7 +1102,7 @@ local.get $0 local.get $5 call $~lib/rt/tlsf/prepareBlock - br $__inlined_func$~lib/rt/tlsf/reallocateBlock$53 + br $__inlined_func$~lib/rt/tlsf/reallocateBlock$54 end local.get $0 i32.const 4 @@ -1107,7 +1143,7 @@ local.get $0 local.get $5 call $~lib/rt/tlsf/prepareBlock - br $__inlined_func$~lib/rt/tlsf/reallocateBlock$53 + br $__inlined_func$~lib/rt/tlsf/reallocateBlock$54 end end local.get $3 diff --git a/tests/compiler/if.debug.wat b/tests/compiler/if.debug.wat index 482f743bca..b0ecf46b73 100644 --- a/tests/compiler/if.debug.wat +++ b/tests/compiler/if.debug.wat @@ -2,7 +2,8 @@ (type $0 (func (param i32) (result i32))) (type $1 (func)) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 76)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) (global $~lib/memory/__heap_base i32 (i32.const 32844)) @@ -146,4 +147,49 @@ (func $~start call $start:if ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/if.release.wat b/tests/compiler/if.release.wat index 549bb1ff21..df464b4e1d 100644 --- a/tests/compiler/if.release.wat +++ b/tests/compiler/if.release.wat @@ -1,7 +1,8 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) (memory $0 1) (data $0 (i32.const 1036) "\1c") (data $0.1 (i32.const 1048) "\02\00\00\00\n\00\00\00i\00f\00.\00t\00s") @@ -12,6 +13,41 @@ (export "ifThenElseBlock" (func $if/ifThenElse)) (export "ifAlwaysReturns" (func $if/ifAlwaysReturns)) (export "memory" (memory $0)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $if/ifThenElse (param $0 i32) (result i32) local.get $0 i32.const 0 diff --git a/tests/compiler/import-memory.debug.wat b/tests/compiler/import-memory.debug.wat index 9478e9002e..3e89ffca11 100644 --- a/tests/compiler/import-memory.debug.wat +++ b/tests/compiler/import-memory.debug.wat @@ -2,7 +2,8 @@ (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) (import "env" "memory" (memory $0 1)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 76)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) (global $~lib/memory/__heap_base i32 (i32.const 32844)) @@ -28,4 +29,49 @@ (func $~start call $start:import-memory ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/import-memory.release.wat b/tests/compiler/import-memory.release.wat index 2b56107252..21442e4709 100644 --- a/tests/compiler/import-memory.release.wat +++ b/tests/compiler/import-memory.release.wat @@ -1,19 +1,52 @@ (module - (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) (import "env" "memory" (memory $0 1)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) (data $0 (i32.const 1036) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00i\00m\00p\00o\00r\00t\00-\00m\00e\00m\00o\00r\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start memory.size i32.eqz if i32.const 0 i32.const 1056 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/incremental-gc/call-indirect.debug.wat b/tests/compiler/incremental-gc/call-indirect.debug.wat index f41def2823..b7e519d2fe 100644 --- a/tests/compiler/incremental-gc/call-indirect.debug.wat +++ b/tests/compiler/incremental-gc/call-indirect.debug.wat @@ -4,20 +4,22 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) @@ -27,6 +29,7 @@ (global $~lib/memory/__data_end i32 (i32.const 576)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33344)) (global $~lib/memory/__heap_base i32 (i32.const 33344)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 16) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -227,7 +230,7 @@ if i32.const 160 i32.const 224 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2343,76 +2346,6 @@ unreachable end ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 160 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 368 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $incremental-gc/call-indirect/B - block $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32> - block $incremental-gc/call-indirect/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $incremental-gc/call-indirect/A $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32> $incremental-gc/call-indirect/B $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>~visit - return - end - return - end - unreachable - ) (func $~start call $start:incremental-gc/call-indirect ) @@ -2429,6 +2362,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $incremental-gc/call-indirect/B#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2586,8 +2551,8 @@ local.get $0 return ) - (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2597,21 +2562,95 @@ i32.const 0 i32.store local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + i32.const 160 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 368 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $incremental-gc/call-indirect/B + block $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32> + block $incremental-gc/call-indirect/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $incremental-gc/call-indirect/A $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32> $incremental-gc/call-indirect/B $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>~visit + return + end + return + end + unreachable + ) + (func $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2620,22 +2659,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28incremental-gc/call-indirect/A%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/incremental-gc/call-indirect.release.wat b/tests/compiler/incremental-gc/call-indirect.release.wat index f43270e2d3..48135bf7e1 100644 --- a/tests/compiler/incremental-gc/call-indirect.release.wat +++ b/tests/compiler/incremental-gc/call-indirect.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32))) - (type $3 (func (result i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (result i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32) (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) @@ -40,6 +40,41 @@ (export "issue_2923" (func $incremental-gc/call-indirect/issue_2923)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1584 + i32.lt_s + if + i32.const 34384 + i32.const 34432 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -78,7 +113,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$123 + block $__inlined_func$~lib/rt/itcms/Object#unlink$124 local.get $1 i32.load offset=4 i32.const -4 @@ -102,7 +137,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$123 + br $__inlined_func$~lib/rt/itcms/Object#unlink$124 end local.get $1 i32.load offset=8 @@ -145,7 +180,7 @@ if i32.const 1168 i32.const 1232 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/infer-array.debug.wat b/tests/compiler/infer-array.debug.wat index 9a5dcdf64f..c81dd5c55d 100644 --- a/tests/compiler/infer-array.debug.wat +++ b/tests/compiler/infer-array.debug.wat @@ -12,10 +12,12 @@ (type $10 (func (param i32 i32) (result f64))) (type $11 (func (param i32 i32) (result f32))) (type $12 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -246,7 +248,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2482,205 +2484,6 @@ local.get $this i32.load offset=4 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 720 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1024 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/string/String|null>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String|null>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String|null>#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array<~lib/array/Array> - block $~lib/array/Array - block $~lib/array/Array<~lib/string/String|null> - block $~lib/array/Array - block $infer-array/Ref - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $infer-array/Ref $~lib/array/Array $~lib/array/Array<~lib/string/String|null> $~lib/array/Array $~lib/array/Array<~lib/array/Array> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String|null>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>~visit - return - end - unreachable - ) (func $~start call $start:infer-array ) @@ -2697,6 +2500,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) (local $value i32) (local $3 i32) @@ -2720,7 +2555,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2773,7 +2608,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2825,7 +2660,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2878,7 +2713,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3050,6 +2885,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -3090,7 +2929,7 @@ if i32.const 256 i32.const 464 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3128,6 +2967,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3160,7 +3003,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3217,7 +3060,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3274,7 +3117,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3329,7 +3172,7 @@ if i32.const 256 i32.const 464 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3367,6 +3210,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3399,7 +3246,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3429,7 +3276,7 @@ if i32.const 1024 i32.const 464 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -4121,8 +3968,11 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -4131,14 +3981,299 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop - local.get $this - local.set $2 + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer i32.store - local.get $2 + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 720 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1024 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/string/String|null>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String|null>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String|null>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array + block $~lib/array/Array<~lib/string/String|null> + block $~lib/array/Array + block $infer-array/Ref + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $infer-array/Ref $~lib/array/Array $~lib/array/Array<~lib/string/String|null> $~lib/array/Array $~lib/array/Array<~lib/array/Array> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String|null>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit @@ -4157,6 +4292,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -4183,6 +4322,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -4209,6 +4352,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -4238,6 +4385,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -4308,6 +4459,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -4375,6 +4530,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -4404,6 +4563,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -4461,85 +4624,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/infer-array.release.wat b/tests/compiler/infer-array.release.wat index a256276d6d..2d32ac3590 100644 --- a/tests/compiler/infer-array.release.wat +++ b/tests/compiler/infer-array.release.wat @@ -3,12 +3,12 @@ (type $1 (func (param i32 i32))) (type $2 (func)) (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32))) - (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (result i32))) (type $7 (func (param i32 i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -70,6 +70,41 @@ (data $25 (i32.const 2160) "\r\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\02\t\00\00\02\1a\00\00\02\01\00\00\02\19\00\00 \00\00\00\02a\00\00\02a\00\00\02\01\00\00\02A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2216 + i32.lt_s + if + i32.const 35008 + i32.const 35056 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) @@ -189,7 +224,7 @@ if i32.const 1280 i32.const 1488 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -235,7 +270,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$149 + block $__inlined_func$~lib/rt/itcms/__renew$143 i32.const 1073741820 local.get $3 i32.const 1 @@ -278,7 +313,7 @@ i32.store offset=16 local.get $3 local.set $4 - br $__inlined_func$~lib/rt/itcms/__renew$149 + br $__inlined_func$~lib/rt/itcms/__renew$143 end local.get $6 local.get $5 @@ -383,7 +418,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -431,7 +466,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -857,7 +892,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1353,7 +1388,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$154 + block $__inlined_func$~lib/rt/itcms/Object#unlink$155 local.get $0 i32.load offset=4 i32.const -4 @@ -1377,7 +1412,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$154 + br $__inlined_func$~lib/rt/itcms/Object#unlink$155 end local.get $0 i32.load offset=8 @@ -1420,7 +1455,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1983,7 +2018,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2029,7 +2064,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2704,7 +2739,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2723,7 +2758,7 @@ if i32.const 2048 i32.const 1488 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/infer-generic.debug.wat b/tests/compiler/infer-generic.debug.wat index 387d796ac2..cc3fd4caa5 100644 --- a/tests/compiler/infer-generic.debug.wat +++ b/tests/compiler/infer-generic.debug.wat @@ -4,19 +4,21 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 f32 i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param f32) (result f32))) - (type $8 (func (param f64 f64) (result i32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 f32 i32 i32) (result i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param f32) (result f32))) + (type $9 (func (param f64 f64) (result i32))) (type $10 (func (param i32 i32 i64) (result i32))) (type $11 (func (result i32))) (type $12 (func (param i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $infer-generic/arr i32 (i32.const 128)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -33,6 +35,7 @@ (global $~lib/memory/__data_end i32 (i32.const 636)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33404)) (global $~lib/memory/__heap_base i32 (i32.const 33404)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00i\00n\00f\00e\00r\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0c\00\00\00\00\00\80?\00\00\00@\00\00@@") @@ -273,7 +276,7 @@ if i32.const 400 i32.const 464 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2326,167 +2329,145 @@ local.get $this i32.load ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $infer-generic/arr - local.tee $1 + (func $~start + call $start:infer-generic + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 33424 + i32.const 33472 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable end - i32.const 400 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 208 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + (func $export:infer-generic/test2 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - call $~lib/object/Object~visit + i32.store local.get $0 + call $infer-generic/test2 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 ) - (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + (func $export:infer-generic/test3 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - call $~lib/object/Object~visit + i32.store local.get $0 + call $infer-generic/test3 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28%29=>f64>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 ) - (func $~lib/function/Function<%28%29=>f64>~visit (param $0 i32) (param $1 i32) + (func $export:infer-generic/test4 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - call $~lib/object/Object~visit + i32.store local.get $0 + call $infer-generic/test4 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28%29=>f64>#__visit - ) - (func $~lib/function/Function<%28f32%29=>f64>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 ) - (func $~lib/function/Function<%28f32%29=>f64>~visit (param $0 i32) (param $1 i32) + (func $export:infer-generic/test5 (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - call $~lib/object/Object~visit + i32.store local.get $0 + call $infer-generic/test5 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28f32%29=>f64>#__visit - ) - (func $~lib/function/Function<%28f32%2Ci32%29=>f64>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 ) - (func $~lib/function/Function<%28f32%2Ci32%29=>f64>~visit (param $0 i32) (param $1 i32) + (func $export:infer-generic/inferAssert (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $1 - call $~lib/object/Object~visit + i32.store local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%29=>f64>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28f32%2Ci32%29=>f64> - block $~lib/function/Function<%28f32%29=>f64> - block $~lib/function/Function<%28%29=>f64> - block $infer-generic/Ref - block $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool> - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool> $infer-generic/Ref $~lib/function/Function<%28%29=>f64> $~lib/function/Function<%28f32%29=>f64> $~lib/function/Function<%28f32%2Ci32%29=>f64> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>f64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%29=>f64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%29=>f64>~visit - return - end - unreachable - ) - (func $~start - call $start:infer-generic + call $infer-generic/inferAssert + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~stack_check + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33424 - i32.const 33472 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) (func $~lib/array/Array#reduce (param $this i32) (param $fn i32) (param $initialValue i32) (result i32) (local $acc i32) @@ -2565,7 +2546,7 @@ global.set $~argumentsLength local.get $8 i32.load - call_indirect (type $5) + call_indirect (type $6) local.set $acc local.get $i i32.const 1 @@ -2876,8 +2857,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2886,23 +2867,171 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $infer-generic/arr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 400 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 208 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>#__visit + ) + (func $~lib/function/Function<%28f32%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%29=>f64>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%2Ci32%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%29=>f64>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28f32%2Ci32%29=>f64> + block $~lib/function/Function<%28f32%29=>f64> + block $~lib/function/Function<%28%29=>f64> + block $infer-generic/Ref + block $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool> + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool> $infer-generic/Ref $~lib/function/Function<%28%29=>f64> $~lib/function/Function<%28f32%29=>f64> $~lib/function/Function<%28f32%2Ci32%29=>f64> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%29=>f64>~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2912,13 +3041,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -2926,7 +3061,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28%29=>f64>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2936,13 +3071,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28%29=>f64>#get:_env + call $~lib/function/Function<%28bool%2Cf32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -2950,7 +3089,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28f32%29=>f64>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28%29=>f64>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2960,13 +3099,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28f32%29=>f64>#get:_env + call $~lib/function/Function<%28%29=>f64>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -2974,7 +3117,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28f32%2Ci32%29=>f64>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28f32%29=>f64>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -2984,13 +3127,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28f32%2Ci32%29=>f64>#get:_env + call $~lib/function/Function<%28f32%29=>f64>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -2998,8 +3145,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) + (func $~lib/function/Function<%28f32%2Ci32%29=>f64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3008,111 +3155,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:infer-generic/test2 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $infer-generic/test2 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:infer-generic/test3 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $infer-generic/test3 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:infer-generic/test4 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $infer-generic/test4 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:infer-generic/test5 (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $infer-generic/test5 - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:infer-generic/inferAssert (param $0 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 - call $infer-generic/inferAssert + local.get $2 + call $~lib/function/Function<%28f32%2Ci32%29=>f64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add diff --git a/tests/compiler/infer-generic.release.wat b/tests/compiler/infer-generic.release.wat index a2b525afea..675c2d2bef 100644 --- a/tests/compiler/infer-generic.release.wat +++ b/tests/compiler/infer-generic.release.wat @@ -1,15 +1,15 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 f32 i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 f32 i32 i32) (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (result i32))) (type $9 (func (param f32) (result f32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -51,6 +51,41 @@ (export "test5" (func $export:infer-generic/test2)) (export "inferAssert" (func $export:infer-generic/inferAssert)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1660 + i32.lt_s + if + i32.const 34448 + i32.const 34496 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -89,7 +124,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$138 + block $__inlined_func$~lib/rt/itcms/Object#unlink$139 local.get $1 i32.load offset=4 i32.const -4 @@ -113,7 +148,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$138 + br $__inlined_func$~lib/rt/itcms/Object#unlink$139 end local.get $1 i32.load offset=8 @@ -156,7 +191,7 @@ if i32.const 1424 i32.const 1488 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1492,7 +1527,7 @@ i32.const 1152 i32.const 1200 i32.load - call_indirect (type $4) + call_indirect (type $5) local.set $0 local.get $1 i32.const 1 diff --git a/tests/compiler/inlining-blocklocals.debug.wat b/tests/compiler/inlining-blocklocals.debug.wat index fd5ccaf5c2..b4a4c34c96 100644 --- a/tests/compiler/inlining-blocklocals.debug.wat +++ b/tests/compiler/inlining-blocklocals.debug.wat @@ -1,11 +1,12 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $inlining-blocklocals/b (mut i32) (i32.const 2)) (global $inlining-blocklocals/theCall_a (mut i32) (i32.const 0)) (global $inlining-blocklocals/theCall_b (mut i32) (i32.const 0)) (global $inlining-blocklocals/theCall_c (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 92)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32860)) (global $~lib/memory/__heap_base i32 (i32.const 32860)) @@ -104,4 +105,49 @@ (func $~start call $start:inlining-blocklocals ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32880 + i32.const 32928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/inlining-blocklocals.release.wat b/tests/compiler/inlining-blocklocals.release.wat index ede3330ebc..7eb7e5028d 100644 --- a/tests/compiler/inlining-blocklocals.release.wat +++ b/tests/compiler/inlining-blocklocals.release.wat @@ -1,15 +1,51 @@ (module (type $0 (func (param i32 i32 i32 i32))) (type $1 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $inlining-blocklocals/b (mut i32) (i32.const 2)) (global $inlining-blocklocals/theCall_b (mut i32) (i32.const 0)) (global $inlining-blocklocals/theCall_c (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33884)) (memory $0 1) (data $0 (i32.const 1036) "L") (data $0.1 (i32.const 1048) "\02\00\00\00.\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00-\00b\00l\00o\00c\00k\00l\00o\00c\00a\00l\00s\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + i32.const 33904 + i32.const 33952 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start (local $0 i32) global.get $inlining-blocklocals/b diff --git a/tests/compiler/inlining.debug.wat b/tests/compiler/inlining.debug.wat index c4f5314669..b652eae280 100644 --- a/tests/compiler/inlining.debug.wat +++ b/tests/compiler/inlining.debug.wat @@ -5,13 +5,14 @@ (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32) (result f64))) - (type $8 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i32) (result f64))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (param f64) (result f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $inlining/constantGlobal i32 (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -24,6 +25,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -31,6 +33,7 @@ (global $~lib/memory/__data_end i32 (i32.const 532)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33300)) (global $~lib/memory/__heap_base i32 (i32.const 33300)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\16\00\00\00i\00n\00l\00i\00n\00i\00n\00g\00.\00t\00s\00\00\00\00\00\00\00") (data $1 (i32.const 60) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") @@ -496,7 +499,7 @@ if i32.const 304 i32.const 368 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2766,79 +2769,6 @@ f64.div return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 304 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $inlining/Baz - block $inlining/Bar - block $inlining/Foo - block $~lib/function/Function<%28i32%29=>i32> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $inlining/Foo $inlining/Bar $inlining/Baz $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>~visit - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:inlining ) @@ -2855,6 +2785,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $inlining/test_ctor (local $this i32) (local $f i32) @@ -3036,6 +2998,79 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 304 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $inlining/Baz + block $inlining/Bar + block $inlining/Foo + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $inlining/Foo $inlining/Bar $inlining/Baz $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + return + end + return + end + return + end + unreachable + ) (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -3046,6 +3081,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer diff --git a/tests/compiler/inlining.release.wat b/tests/compiler/inlining.release.wat index 0da8126d77..c74bf9c501 100644 --- a/tests/compiler/inlining.release.wat +++ b/tests/compiler/inlining.release.wat @@ -1,15 +1,15 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32) (result i32))) - (type $6 (func (param i32 i32 i32) (result f64))) - (type $7 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param i32 i32 i32) (result f64))) (type $8 (func (param f64) (result f64))) (type $9 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -45,6 +45,41 @@ (export "bar" (func $inlining/bar)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1556 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -83,7 +118,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$125 + block $__inlined_func$~lib/rt/itcms/Object#unlink$126 local.get $1 i32.load offset=4 i32.const -4 @@ -107,7 +142,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$125 + br $__inlined_func$~lib/rt/itcms/Object#unlink$126 end local.get $1 i32.load offset=8 @@ -150,7 +185,7 @@ if i32.const 1328 i32.const 1392 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1738,7 +1773,7 @@ i32.const 2 i32.const 1104 i32.load - call_indirect (type $5) + call_indirect (type $6) drop global.get $~lib/memory/__stack_pointer i32.const 123 diff --git a/tests/compiler/instanceof.debug.wat b/tests/compiler/instanceof.debug.wat index 6cf9d166a7..3568508fd2 100644 --- a/tests/compiler/instanceof.debug.wat +++ b/tests/compiler/instanceof.debug.wat @@ -4,12 +4,13 @@ (type $2 (func (param i32 i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -248,7 +250,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4453,238 +4455,6 @@ end i32.const 1 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $instanceof/a - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/b - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/an - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/child - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/childAsParent - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/animal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/cat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/blackcat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullableAnimal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullableCat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullableBlackcat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullAnimal - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullCat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/nullBlackcat - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/w - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/x - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/y - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $instanceof/z - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $instanceof/IE - block $instanceof/Z - block $instanceof/IC - block $instanceof/ID - block $instanceof/Y - block $instanceof/IA - block $instanceof/IB - block $instanceof/X - block $instanceof/W - block $instanceof/BlackCat - block $instanceof/Cat - block $instanceof/Animal - block $instanceof/SomethingElse - block $instanceof/Parent - block $instanceof/Child - block $instanceof/Parent - block $instanceof/Child - block $instanceof/C - block $instanceof/B - block $instanceof/A - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $instanceof/A $instanceof/B $instanceof/C $instanceof/Child $instanceof/Parent $instanceof/Child $instanceof/Parent $instanceof/SomethingElse $instanceof/Animal $instanceof/Cat $instanceof/BlackCat $instanceof/W $instanceof/X $instanceof/IB $instanceof/IA $instanceof/Y $instanceof/ID $instanceof/IC $instanceof/Z $instanceof/IE $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:instanceof ) @@ -4701,6 +4471,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $instanceof/A#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -7036,4 +6838,236 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $instanceof/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/b + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/an + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/child + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/childAsParent + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/animal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/cat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/blackcat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullableAnimal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullableCat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullableBlackcat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullAnimal + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullCat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/nullBlackcat + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/w + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/x + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/y + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $instanceof/z + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $instanceof/IE + block $instanceof/Z + block $instanceof/IC + block $instanceof/ID + block $instanceof/Y + block $instanceof/IA + block $instanceof/IB + block $instanceof/X + block $instanceof/W + block $instanceof/BlackCat + block $instanceof/Cat + block $instanceof/Animal + block $instanceof/SomethingElse + block $instanceof/Parent + block $instanceof/Child + block $instanceof/Parent + block $instanceof/Child + block $instanceof/C + block $instanceof/B + block $instanceof/A + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $instanceof/A $instanceof/B $instanceof/C $instanceof/Child $instanceof/Parent $instanceof/Child $instanceof/Parent $instanceof/SomethingElse $instanceof/Animal $instanceof/Cat $instanceof/BlackCat $instanceof/W $instanceof/X $instanceof/IB $instanceof/IA $instanceof/Y $instanceof/ID $instanceof/IC $instanceof/Z $instanceof/IE $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/instanceof.release.wat b/tests/compiler/instanceof.release.wat index 3605a2ca97..fb5891ebdb 100644 --- a/tests/compiler/instanceof.release.wat +++ b/tests/compiler/instanceof.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32))) (type $2 (func)) - (type $3 (func (param i32 i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -49,6 +49,41 @@ (data $9 (i32.const 1488) "\18\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1588 + i32.lt_s + if + i32.const 34384 + i32.const 34432 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $"instanceof/assertDynamicTrue<~lib/object/Object,instanceof/Y>" (param $0 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -147,7 +182,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$241 + block $__inlined_func$~lib/rt/itcms/Object#unlink$242 local.get $1 i32.load offset=4 i32.const -4 @@ -171,7 +206,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$241 + br $__inlined_func$~lib/rt/itcms/Object#unlink$242 end local.get $1 i32.load offset=8 @@ -214,7 +249,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/1095.debug.wat b/tests/compiler/issues/1095.debug.wat index 4a22d3612d..a95acad696 100644 --- a/tests/compiler/issues/1095.debug.wat +++ b/tests/compiler/issues/1095.debug.wat @@ -8,7 +8,8 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -227,7 +229,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2328,68 +2330,6 @@ local.get $this i32.load ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $issues/1095/Foo~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $issues/1095/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1095/Foo $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $issues/1095/Foo~visit - return - end - unreachable - ) (func $~start call $start:issues/1095 ) @@ -2406,6 +2346,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $issues/1095/Foo#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2572,4 +2544,66 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $issues/1095/Foo~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/1095/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1095/Foo $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $issues/1095/Foo~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/issues/1095.release.wat b/tests/compiler/issues/1095.release.wat index 542118d3ea..f62a3c2c5c 100644 --- a/tests/compiler/issues/1095.release.wat +++ b/tests/compiler/issues/1095.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -38,6 +38,41 @@ (data $11 (i32.const 1648) "\05\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1672 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -477,7 +512,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$117 + block $__inlined_func$~lib/rt/itcms/Object#unlink$118 local.get $0 i32.load offset=4 i32.const -4 @@ -501,7 +536,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$117 + br $__inlined_func$~lib/rt/itcms/Object#unlink$118 end local.get $0 i32.load offset=8 @@ -544,7 +579,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/1225.debug.wat b/tests/compiler/issues/1225.debug.wat index 2abb8194d5..8944465cdb 100644 --- a/tests/compiler/issues/1225.debug.wat +++ b/tests/compiler/issues/1225.debug.wat @@ -5,10 +5,11 @@ (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -242,7 +244,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2371,62 +2373,6 @@ global.set $issues/1225/x call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $issues/1225/x - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $issues/1225/X - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1225/X $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:issues/1225 ) @@ -2443,6 +2389,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $issues/1225/X#constructor (param $this i32) (param $x i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2570,4 +2548,60 @@ local.get $0 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $issues/1225/x + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/1225/X + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1225/X $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/issues/1225.release.wat b/tests/compiler/issues/1225.release.wat index 3a9ede7e7b..1950c576f1 100644 --- a/tests/compiler/issues/1225.release.wat +++ b/tests/compiler/issues/1225.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -37,6 +37,41 @@ (export "viaThis" (func $issues/1225/viaThis)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1512 + i32.lt_s + if + i32.const 34304 + i32.const 34352 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -75,7 +110,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$119 + block $__inlined_func$~lib/rt/itcms/Object#unlink$120 local.get $1 i32.load offset=4 i32.const -4 @@ -99,7 +134,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$119 + br $__inlined_func$~lib/rt/itcms/Object#unlink$120 end local.get $1 i32.load offset=8 @@ -142,7 +177,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/1699.debug.wat b/tests/compiler/issues/1699.debug.wat index b7c5009d63..c3b4c4df14 100644 --- a/tests/compiler/issues/1699.debug.wat +++ b/tests/compiler/issues/1699.debug.wat @@ -8,10 +8,12 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -229,7 +231,7 @@ if i32.const 320 i32.const 384 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2432,79 +2434,6 @@ global.set $~lib/rt/itcms/fromSpace call $issues/1699/test ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 320 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 528 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 128 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $issues/1699/MultiAssignmentTest - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1699/MultiAssignmentTest $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:issues/1699 ) @@ -2521,6 +2450,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) (local $2 i32) (local $3 i32) @@ -2588,7 +2549,7 @@ if i32.const 32 i32.const 80 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -2810,6 +2771,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -2850,7 +2815,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2888,6 +2853,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -2920,7 +2889,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2950,7 +2919,7 @@ if i32.const 528 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -3153,6 +3122,107 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 320 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 528 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 128 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $issues/1699/MultiAssignmentTest + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/1699/MultiAssignmentTest $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) @@ -3166,6 +3236,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -3223,32 +3297,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/issues/1699.release.wat b/tests/compiler/issues/1699.release.wat index 5da543848f..c9c30f9be0 100644 --- a/tests/compiler/issues/1699.release.wat +++ b/tests/compiler/issues/1699.release.wat @@ -2,12 +2,12 @@ (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32 i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -41,6 +41,41 @@ (data $12 (i32.const 1712) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\02A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1740 + i32.lt_s + if + i32.const 34528 + i32.const 34576 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -408,7 +443,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -431,7 +466,7 @@ if i32.const 1552 i32.const 1104 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -916,7 +951,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$146 + block $__inlined_func$~lib/rt/itcms/Object#unlink$147 local.get $0 i32.load offset=4 i32.const -4 @@ -940,7 +975,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$146 + br $__inlined_func$~lib/rt/itcms/Object#unlink$147 end local.get $0 i32.load offset=8 @@ -983,7 +1018,7 @@ if i32.const 1344 i32.const 1408 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1154,7 +1189,7 @@ if i32.const 1344 i32.const 1104 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -1200,7 +1235,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$145 + block $__inlined_func$~lib/rt/itcms/__renew$141 i32.const 1073741820 local.get $3 i32.const 1 @@ -1243,7 +1278,7 @@ i32.store offset=16 local.get $3 local.set $4 - br $__inlined_func$~lib/rt/itcms/__renew$145 + br $__inlined_func$~lib/rt/itcms/__renew$141 end local.get $6 local.get $5 diff --git a/tests/compiler/issues/1714.debug.wat b/tests/compiler/issues/1714.debug.wat index a99a595629..35f9f5e099 100644 --- a/tests/compiler/issues/1714.debug.wat +++ b/tests/compiler/issues/1714.debug.wat @@ -1,14 +1,16 @@ (module (type $0 (func (result i32))) (type $1 (func)) - (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) (type $4 (func (param i32 i32 i32 i32 i32) (result i32))) (type $5 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 92)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32860)) @@ -177,6 +179,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) diff --git a/tests/compiler/issues/1714.release.wat b/tests/compiler/issues/1714.release.wat index 7645fdba1b..7091252618 100644 --- a/tests/compiler/issues/1714.release.wat +++ b/tests/compiler/issues/1714.release.wat @@ -1,7 +1,7 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33884)) (memory $0 1) (data $0 (i32.const 1036) ",") @@ -10,48 +10,76 @@ (data $1.1 (i32.const 1096) "\02\00\00\00\06\00\00\00i\003\002") (export "memory" (memory $0)) (start $~start) - (func $~start + (func $~lib/builtins/abort global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 1116 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1104 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1116 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + call $~lib/builtins/abort + unreachable end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33904 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33952 + i32.store offset=4 i32.const 33904 i32.const 33952 i32.const 1 i32.const 1 - call $~lib/builtins/abort - unreachable + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1104 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer ) ) diff --git a/tests/compiler/issues/2166.debug.wat b/tests/compiler/issues/2166.debug.wat index 0d98c3c656..d0821f4809 100644 --- a/tests/compiler/issues/2166.debug.wat +++ b/tests/compiler/issues/2166.debug.wat @@ -9,7 +9,8 @@ (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -231,7 +233,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2408,58 +2410,6 @@ unreachable end ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $issues/2166/Test2166Ref2 - block $issues/2166/Test2166Ref1<~lib/string/String> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2166/Test2166Ref1<~lib/string/String> $issues/2166/Test2166Ref2 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:issues/2166 ) @@ -2476,6 +2426,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $issues/2166/Test2166Ref1<~lib/string/String>#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2750,4 +2732,56 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/2166/Test2166Ref2 + block $issues/2166/Test2166Ref1<~lib/string/String> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2166/Test2166Ref1<~lib/string/String> $issues/2166/Test2166Ref2 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/issues/2166.release.wat b/tests/compiler/issues/2166.release.wat index fa61a80944..160641fe47 100644 --- a/tests/compiler/issues/2166.release.wat +++ b/tests/compiler/issues/2166.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32) (result i32))) (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -43,6 +43,41 @@ (data $13 (i32.const 1632) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1660 + i32.lt_s + if + i32.const 34448 + i32.const 34496 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -243,7 +278,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$122 + block $__inlined_func$~lib/rt/itcms/Object#unlink$123 local.get $1 i32.load offset=4 i32.const -4 @@ -267,7 +302,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$122 + br $__inlined_func$~lib/rt/itcms/Object#unlink$123 end local.get $1 i32.load offset=8 @@ -310,7 +345,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/2322/index.debug.wat b/tests/compiler/issues/2322/index.debug.wat index 3799f01a97..e634a21075 100644 --- a/tests/compiler/issues/2322/index.debug.wat +++ b/tests/compiler/issues/2322/index.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -225,7 +227,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2252,55 +2254,6 @@ ) (func $issues/2322/lib/test (param $t i32) ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $issues/2322/lib/Wrapper - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2322/lib/Wrapper $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start memory.size i32.const 16 @@ -2333,6 +2286,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $issues/2322/lib/Wrapper#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2430,4 +2415,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/2322/lib/Wrapper + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2322/lib/Wrapper $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/issues/2322/index.release.wat b/tests/compiler/issues/2322/index.release.wat index cf2df6b497..a35c3c8394 100644 --- a/tests/compiler/issues/2322/index.release.wat +++ b/tests/compiler/issues/2322/index.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -33,6 +33,41 @@ (export "test" (func $issues/2322/index/test)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1464 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -71,7 +106,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$112 + block $__inlined_func$~lib/rt/itcms/Object#unlink$113 local.get $1 i32.load offset=4 i32.const -4 @@ -95,7 +130,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$112 + br $__inlined_func$~lib/rt/itcms/Object#unlink$113 end local.get $1 i32.load offset=8 @@ -138,7 +173,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/2622.debug.wat b/tests/compiler/issues/2622.debug.wat index 6514ce97bf..72e483c4d7 100644 --- a/tests/compiler/issues/2622.debug.wat +++ b/tests/compiler/issues/2622.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -228,7 +230,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2280,100 +2282,6 @@ global.get $issues/2622/_b/t2 global.set $issues/2622/b ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $issues/2622/a - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $issues/2622/b - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - global.get $issues/2622/_a/t1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $issues/2622/_a/t1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $issues/2622/_b/t2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $issues/2622/_b/t2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $issues/2622/_b/T2 - block $issues/2622/_a/T1 - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2622/_a/T1 $issues/2622/_b/T2 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:issues/2622 ) @@ -2390,6 +2298,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $issues/2622/_a/T1#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2494,4 +2434,98 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $issues/2622/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $issues/2622/b + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $issues/2622/_a/t1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $issues/2622/_a/t1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $issues/2622/_b/t2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $issues/2622/_b/t2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $issues/2622/_b/T2 + block $issues/2622/_a/T1 + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $issues/2622/_a/T1 $issues/2622/_b/T2 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/issues/2622.release.wat b/tests/compiler/issues/2622.release.wat index 2cb8d68623..09acbe68e6 100644 --- a/tests/compiler/issues/2622.release.wat +++ b/tests/compiler/issues/2622.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -36,6 +36,41 @@ (data $8 (i32.const 1440) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1468 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -74,7 +109,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$111 + block $__inlined_func$~lib/rt/itcms/Object#unlink$112 local.get $1 i32.load offset=4 i32.const -4 @@ -98,7 +133,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$111 + br $__inlined_func$~lib/rt/itcms/Object#unlink$112 end local.get $1 i32.load offset=8 @@ -141,7 +176,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/2707.debug.wat b/tests/compiler/issues/2707.debug.wat index 388b0f0f43..bf96420324 100644 --- a/tests/compiler/issues/2707.debug.wat +++ b/tests/compiler/issues/2707.debug.wat @@ -10,11 +10,13 @@ (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) (type $10 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $issues/2707/func (mut i32) (i32.const 32)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -26,6 +28,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 496)) (global $~lib/memory/__data_end i32 (i32.const 524)) @@ -234,7 +237,7 @@ if i32.const 304 i32.const 368 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2338,6 +2341,165 @@ end end ) + (func $~start + call $start:issues/2707 + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33312 + i32.const 33360 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $start:issues/2707 + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 224 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 256 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 400 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + global.get $issues/2707/func + local.tee $1 + i32.store + i32.const 4 + i32.const 2 + i32.const 4 + i32.const 64 + call $~lib/rt/__newArray + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + global.set $~argumentsLength + local.get $1 + i32.load + call_indirect (type $0) + drop + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 304 @@ -2420,76 +2582,6 @@ end unreachable ) - (func $~start - call $start:issues/2707 - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33312 - i32.const 33360 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $start:issues/2707 - (local $0 i32) - (local $1 i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base - i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 224 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 256 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 400 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - global.get $~lib/memory/__stack_pointer - global.get $issues/2707/func - local.tee $1 - i32.store - i32.const 4 - i32.const 2 - i32.const 4 - i32.const 64 - call $~lib/rt/__newArray - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - global.set $~argumentsLength - local.get $1 - i32.load - call_indirect (type $0) - drop - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2500,6 +2592,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -2526,6 +2622,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -2540,57 +2640,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) ) diff --git a/tests/compiler/issues/2707.release.wat b/tests/compiler/issues/2707.release.wat index ad235b50e2..e033fc0c84 100644 --- a/tests/compiler/issues/2707.release.wat +++ b/tests/compiler/issues/2707.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32))) (type $2 (func)) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -38,6 +38,41 @@ (elem $0 (i32.const 1) $start:issues/2707~anonymous|0) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1548 + i32.lt_s + if + i32.const 34336 + i32.const 34384 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -477,7 +512,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$119 + block $__inlined_func$~lib/rt/itcms/Object#unlink$120 local.get $0 i32.load offset=4 i32.const -4 @@ -501,7 +536,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$119 + br $__inlined_func$~lib/rt/itcms/Object#unlink$120 end local.get $0 i32.load offset=8 @@ -544,7 +579,7 @@ if i32.const 1328 i32.const 1392 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/issues/2825.debug.wat b/tests/compiler/issues/2825.debug.wat index 4ecc4ddd57..ce6afd0bd1 100644 --- a/tests/compiler/issues/2825.debug.wat +++ b/tests/compiler/issues/2825.debug.wat @@ -2,7 +2,8 @@ (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) (type $2 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -66,4 +67,49 @@ (func $~start call $start:issues/2825 ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/issues/2825.release.wat b/tests/compiler/issues/2825.release.wat index a03d3b82f6..e4e2bada4d 100644 --- a/tests/compiler/issues/2825.release.wat +++ b/tests/compiler/issues/2825.release.wat @@ -1,13 +1,49 @@ (module - (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32 i32))) + (type $1 (func)) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\1c\00\00\00i\00s\00s\00u\00e\00s\00/\002\008\002\005\00.\00t\00s") (export "init" (func $issues/2825/init)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start (local $0 i32) loop $for-loop|0 diff --git a/tests/compiler/issues/2873.debug.wat b/tests/compiler/issues/2873.debug.wat index 15c9c5ddef..9d145ae09a 100644 --- a/tests/compiler/issues/2873.debug.wat +++ b/tests/compiler/issues/2873.debug.wat @@ -6,9 +6,9 @@ (type $4 (func)) (type $5 (func (param i32 i32 i32) (result i32))) (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) - (type $8 (func (param i32 f64 i32) (result i32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) + (type $9 (func (param i32 f64 i32) (result i32))) (type $10 (func (param i32 i32 i64) (result i32))) (type $11 (func (result i32))) (type $12 (func (param f32 i32) (result i32))) @@ -18,7 +18,7 @@ (type $16 (func (param i32 f64) (result i32))) (type $17 (func (param f32) (result i32))) (type $18 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) (global $~lib/util/number/_exp (mut i32) (i32.const 0)) @@ -26,6 +26,7 @@ (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0)) (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -37,6 +38,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -46,6 +48,7 @@ (global $~lib/memory/__data_end i32 (i32.const 2348)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35116)) (global $~lib/memory/__heap_base i32 (i32.const 35116)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\000\00.\000\00\00\00\00\00\00\00") (data $1 (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\06\00\00\00N\00a\00N\00\00\00\00\00\00\00") @@ -1826,7 +1829,7 @@ if i32.const 1760 i32.const 1824 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4162,102 +4165,6 @@ end return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $issues/2873/f32arr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $issues/2873/f64arr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 1760 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1568 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:issues/2873 ) @@ -4274,6 +4181,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -5079,58 +5018,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/util/number/dtoa (param $value f32) (result i32) (local $value|1 f64) (local $isSingle i32) @@ -5284,4 +5171,160 @@ local.get $5 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $issues/2873/f32arr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $issues/2873/f64arr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 1760 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1568 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/issues/2873.release.wat b/tests/compiler/issues/2873.release.wat index 82a92f5c23..2431a3338c 100644 --- a/tests/compiler/issues/2873.release.wat +++ b/tests/compiler/issues/2873.release.wat @@ -2,8 +2,8 @@ (type $0 (func (param i32))) (type $1 (func (param i32 i32) (result i32))) (type $2 (func)) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 f64 i32) (result i32))) (type $7 (func (param i32 i32 i32))) @@ -15,7 +15,7 @@ (type $13 (func (param i32 i32 i32) (result i32))) (type $14 (func (param i32 i64 i64 i32 i64 i32) (result i32))) (type $15 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) (global $~lib/util/number/_exp (mut i32) (i32.const 0)) @@ -77,6 +77,41 @@ (data $26 (i32.const 3344) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\02\19\00\00\02\1a") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3372 + i32.lt_s + if + i32.const 36160 + i32.const 36208 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -115,7 +150,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$138 + block $__inlined_func$~lib/rt/itcms/Object#unlink$139 local.get $1 i32.load offset=4 i32.const -4 @@ -139,7 +174,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$138 + br $__inlined_func$~lib/rt/itcms/Object#unlink$139 end local.get $1 i32.load offset=8 @@ -182,7 +217,7 @@ if i32.const 2784 i32.const 2848 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -970,7 +1005,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$82 + block $__inlined_func$~lib/util/string/compareImpl$80 loop $while-continue|1 local.get $0 local.tee $3 @@ -990,7 +1025,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$82 + br_if $__inlined_func$~lib/util/string/compareImpl$80 local.get $2 i32.const 2 i32.add @@ -2479,7 +2514,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinFloatArray$143 + block $__inlined_func$~lib/util/string/joinFloatArray$144 local.get $1 i32.const 1 i32.sub @@ -2493,7 +2528,7 @@ global.set $~lib/memory/__stack_pointer i32.const 3152 local.set $1 - br $__inlined_func$~lib/util/string/joinFloatArray$143 + br $__inlined_func$~lib/util/string/joinFloatArray$144 end local.get $4 i32.eqz @@ -2506,7 +2541,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinFloatArray$143 + br $__inlined_func$~lib/util/string/joinFloatArray$144 end global.get $~lib/memory/__stack_pointer i32.const 3184 @@ -2602,7 +2637,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinFloatArray$143 + br $__inlined_func$~lib/util/string/joinFloatArray$144 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -2668,7 +2703,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinFloatArray$144 + block $__inlined_func$~lib/util/string/joinFloatArray$145 local.get $0 i32.const 1 i32.sub @@ -2682,7 +2717,7 @@ global.set $~lib/memory/__stack_pointer i32.const 3152 local.set $1 - br $__inlined_func$~lib/util/string/joinFloatArray$144 + br $__inlined_func$~lib/util/string/joinFloatArray$145 end local.get $4 i32.eqz @@ -2695,7 +2730,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinFloatArray$144 + br $__inlined_func$~lib/util/string/joinFloatArray$145 end global.get $~lib/memory/__stack_pointer i32.const 3184 @@ -2795,7 +2830,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinFloatArray$144 + br $__inlined_func$~lib/util/string/joinFloatArray$145 end global.get $~lib/memory/__stack_pointer i32.const 8 diff --git a/tests/compiler/issues/2989.debug.wat b/tests/compiler/issues/2989.debug.wat index 274c42c3f8..071b70809d 100644 --- a/tests/compiler/issues/2989.debug.wat +++ b/tests/compiler/issues/2989.debug.wat @@ -1,12 +1,13 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $issues/2989/value (mut i32) (i32.const 0)) (global $issues/2989/fn (mut i32) (i32.const 32)) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 124)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32892)) (global $~lib/memory/__heap_base i32 (i32.const 32892)) @@ -86,4 +87,36 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/issues/2989.release.wat b/tests/compiler/issues/2989.release.wat index 5b88950dd6..4b731957b8 100644 --- a/tests/compiler/issues/2989.release.wat +++ b/tests/compiler/issues/2989.release.wat @@ -1,8 +1,9 @@ (module (type $0 (func (param i32))) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $issues/2989/value (mut i32) (i32.const 0)) (global $issues/2989/fn (mut i32) (i32.const 1056)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33916)) @@ -17,6 +18,40 @@ (elem $0 (i32.const 1) $issues/2989/logA $issues/2989/logB) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1148 + i32.lt_s + if + i32.const 33936 + i32.const 33984 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start (local $0 i32) global.get $~lib/memory/__stack_pointer @@ -30,7 +65,6 @@ i32.const 33936 i32.const 33984 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -54,7 +88,6 @@ i32.const 0 i32.const 1120 i32.const 20 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/logical.debug.wat b/tests/compiler/logical.debug.wat index bf7e9e66c3..f5ba99c3f3 100644 --- a/tests/compiler/logical.debug.wat +++ b/tests/compiler/logical.debug.wat @@ -4,13 +4,14 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i64 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i64 i32) (result i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $logical/i (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $logical/I (mut i64) (i64.const 0)) (global $logical/f (mut f32) (f32.const 0)) (global $logical/F (mut f64) (f64.const 0)) @@ -25,6 +26,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -262,7 +264,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2318,78 +2320,6 @@ end return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $logical/b - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $logical/c - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $logical/C - block $logical/A - block $logical/B - block $logical/Obj - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $logical/Obj $logical/B $logical/A $logical/C $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:logical ) @@ -2406,6 +2336,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $logical/Obj#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3019,4 +2981,76 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $logical/b + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $logical/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $logical/C + block $logical/A + block $logical/B + block $logical/Obj + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $logical/Obj $logical/B $logical/A $logical/C $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/logical.release.wat b/tests/compiler/logical.release.wat index 7d72c4c009..200ea28c16 100644 --- a/tests/compiler/logical.release.wat +++ b/tests/compiler/logical.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -44,6 +44,41 @@ (export "qux" (global $logical/qux)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1524 + i32.lt_s + if + i32.const 34320 + i32.const 34368 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -82,7 +117,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$122 + block $__inlined_func$~lib/rt/itcms/Object#unlink$123 local.get $1 i32.load offset=4 i32.const -4 @@ -106,7 +141,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$122 + br $__inlined_func$~lib/rt/itcms/Object#unlink$123 end local.get $1 i32.load offset=8 @@ -149,7 +184,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/loop-flow.debug.wat b/tests/compiler/loop-flow.debug.wat index 2fde4e0b10..05c6e911dd 100644 --- a/tests/compiler/loop-flow.debug.wat +++ b/tests/compiler/loop-flow.debug.wat @@ -3,7 +3,8 @@ (type $1 (func (param i32) (result i32))) (type $2 (func)) (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 92)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32860)) (global $~lib/memory/__heap_base i32 (i32.const 32860)) @@ -285,4 +286,49 @@ (func $~start call $start:loop-flow ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32880 + i32.const 32928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/loop-flow.release.wat b/tests/compiler/loop-flow.release.wat index 808ecef87a..a4d35fe601 100644 --- a/tests/compiler/loop-flow.release.wat +++ b/tests/compiler/loop-flow.release.wat @@ -3,7 +3,8 @@ (type $1 (func (param i32) (result i32))) (type $2 (func (param i32 i32 i32 i32))) (type $3 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33884)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\18\00\00\00l\00o\00o\00p\00-\00f\00l\00o\00w\00.\00t\00s") @@ -22,6 +23,41 @@ (export "doAny" (func $loop-flow/doAny)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + i32.const 33904 + i32.const 33952 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $loop-flow/whileAny (param $0 i32) (result i32) loop $while-continue|0 (result i32) local.get $0 diff --git a/tests/compiler/main.debug.wat b/tests/compiler/main.debug.wat new file mode 100644 index 0000000000..c566f608cc --- /dev/null +++ b/tests/compiler/main.debug.wat @@ -0,0 +1,17 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (global $~lib/memory/__data_end i32 (i32.const 8)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) + (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (memory $0 0) + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (export "main" (func $main/add)) + (func $main/add (param $a i32) (param $b i32) (result i32) + local.get $a + local.get $b + i32.add + return + ) +) diff --git a/tests/compiler/main.release.wat b/tests/compiler/main.release.wat new file mode 100644 index 0000000000..0c6ebbf7be --- /dev/null +++ b/tests/compiler/main.release.wat @@ -0,0 +1,11 @@ +(module + (type $0 (func (param i32 i32) (result i32))) + (memory $0 0) + (export "memory" (memory $0)) + (export "main" (func $main/add)) + (func $main/add (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.add + ) +) diff --git a/tests/compiler/main.ts b/tests/compiler/main.ts new file mode 100644 index 0000000000..b9ab7b229e --- /dev/null +++ b/tests/compiler/main.ts @@ -0,0 +1,6 @@ +// Tests the toil-native `@main` decorator: the decorated top-level function is +// exported as the WebAssembly export "main" without an `export` keyword. +@main +function add(a: i32, b: i32): i32 { + return a + b; +} diff --git a/tests/compiler/managed-cast.debug.wat b/tests/compiler/managed-cast.debug.wat index 1582c65137..278f3cbcac 100644 --- a/tests/compiler/managed-cast.debug.wat +++ b/tests/compiler/managed-cast.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -227,7 +229,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2314,58 +2316,6 @@ end i32.const 1 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $managed-cast/Animal - block $managed-cast/Cat - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $managed-cast/Cat $managed-cast/Animal $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:managed-cast ) @@ -2382,6 +2332,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $managed-cast/Animal#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2902,4 +2884,56 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $managed-cast/Animal + block $managed-cast/Cat + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $managed-cast/Cat $managed-cast/Animal $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/managed-cast.release.wat b/tests/compiler/managed-cast.release.wat index 99e4fafa6f..a1bc643042 100644 --- a/tests/compiler/managed-cast.release.wat +++ b/tests/compiler/managed-cast.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (result i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (result i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -38,6 +38,41 @@ (data $11 (i32.const 1696) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1724 + i32.lt_s + if + i32.const 34512 + i32.const 34560 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $managed-cast/Cat#constructor (result i32) (local $0 i32) (local $1 i32) @@ -431,7 +466,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$137 + block $__inlined_func$~lib/rt/itcms/Object#unlink$138 local.get $1 i32.load offset=4 i32.const -4 @@ -455,7 +490,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$137 + br $__inlined_func$~lib/rt/itcms/Object#unlink$138 end local.get $1 i32.load offset=8 @@ -498,7 +533,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/many-locals.debug.wat b/tests/compiler/many-locals.debug.wat index d3fd8e7178..aaabfefb03 100644 --- a/tests/compiler/many-locals.debug.wat +++ b/tests/compiler/many-locals.debug.wat @@ -1,8 +1,9 @@ (module - (type $0 (func (param i32) (result i32))) - (type $1 (func)) + (type $0 (func)) + (type $1 (func (param i32) (result i32))) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -822,4 +823,49 @@ (func $~start call $start:many-locals ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/memcpy.debug.wat b/tests/compiler/memcpy.debug.wat index 0435fe9b90..1860565e97 100644 --- a/tests/compiler/memcpy.debug.wat +++ b/tests/compiler/memcpy.debug.wat @@ -1,10 +1,11 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memcpy/base i32 (i32.const 8)) (global $memcpy/dest (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -1335,4 +1336,49 @@ (func $~start call $start:memcpy ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/memcpy.release.wat b/tests/compiler/memcpy.release.wat index 1a27a0f799..4b1657b1b1 100644 --- a/tests/compiler/memcpy.release.wat +++ b/tests/compiler/memcpy.release.wat @@ -1,15 +1,51 @@ (module - (type $0 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) (type $1 (func (param i32 i32 i32) (result i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memcpy/dest (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\12\00\00\00m\00e\00m\00c\00p\00y\00.\00t\00s") (export "memcpy" (func $memcpy/memcpy)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $memcpy/memcpy (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -722,7 +758,6 @@ i32.const 0 i32.const 1056 i32.const 151 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -734,7 +769,6 @@ i32.const 0 i32.const 1056 i32.const 152 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -750,7 +784,6 @@ i32.const 0 i32.const 1056 i32.const 155 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -762,7 +795,6 @@ i32.const 0 i32.const 1056 i32.const 156 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -774,7 +806,6 @@ i32.const 0 i32.const 1056 i32.const 157 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -786,7 +817,6 @@ i32.const 0 i32.const 1056 i32.const 158 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -798,7 +828,6 @@ i32.const 0 i32.const 1056 i32.const 159 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -815,7 +844,6 @@ i32.const 0 i32.const 1056 i32.const 162 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -832,7 +860,6 @@ i32.const 0 i32.const 1056 i32.const 165 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -844,7 +871,6 @@ i32.const 0 i32.const 1056 i32.const 166 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -856,7 +882,6 @@ i32.const 0 i32.const 1056 i32.const 167 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -868,7 +893,6 @@ i32.const 0 i32.const 1056 i32.const 168 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/memmove.debug.wat b/tests/compiler/memmove.debug.wat index e325c90617..2afeaca31e 100644 --- a/tests/compiler/memmove.debug.wat +++ b/tests/compiler/memmove.debug.wat @@ -1,10 +1,11 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memmove/base i32 (i32.const 8)) (global $memmove/dest (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -423,4 +424,49 @@ (func $~start call $start:memmove ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/memmove.release.wat b/tests/compiler/memmove.release.wat index ae5857e2d3..e615cd6f06 100644 --- a/tests/compiler/memmove.release.wat +++ b/tests/compiler/memmove.release.wat @@ -1,14 +1,50 @@ (module - (type $0 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) (type $1 (func (param i32 i32 i32) (result i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memmove/dest (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\14\00\00\00m\00e\00m\00m\00o\00v\00e\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $memmove/memmove (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -216,7 +252,6 @@ i32.const 0 i32.const 1056 i32.const 55 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -228,7 +263,6 @@ i32.const 0 i32.const 1056 i32.const 56 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -244,7 +278,6 @@ i32.const 0 i32.const 1056 i32.const 59 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -256,7 +289,6 @@ i32.const 0 i32.const 1056 i32.const 60 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -268,7 +300,6 @@ i32.const 0 i32.const 1056 i32.const 61 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -280,7 +311,6 @@ i32.const 0 i32.const 1056 i32.const 62 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -292,7 +322,6 @@ i32.const 0 i32.const 1056 i32.const 63 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -309,7 +338,6 @@ i32.const 0 i32.const 1056 i32.const 66 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -326,7 +354,6 @@ i32.const 0 i32.const 1056 i32.const 69 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -338,7 +365,6 @@ i32.const 0 i32.const 1056 i32.const 70 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -350,7 +376,6 @@ i32.const 0 i32.const 1056 i32.const 71 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -362,7 +387,6 @@ i32.const 0 i32.const 1056 i32.const 72 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/memory.debug.wat b/tests/compiler/memory.debug.wat index f9d1689708..30e50e5710 100644 --- a/tests/compiler/memory.debug.wat +++ b/tests/compiler/memory.debug.wat @@ -2,7 +2,8 @@ (type $0 (func (result i32))) (type $1 (func)) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $memory/ptr (mut i32) (i32.const 80)) (global $~lib/memory/__data_end i32 (i32.const 212)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32980)) @@ -479,4 +480,49 @@ (func $~start call $start:memory ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33008 + i32.const 33056 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/memory.release.wat b/tests/compiler/memory.release.wat index aafefd95ad..d1cbaedce3 100644 --- a/tests/compiler/memory.release.wat +++ b/tests/compiler/memory.release.wat @@ -1,8 +1,10 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memory/ptr (mut i32) (i32.const 1088)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33988)) (memory $0 1) (data $1 (i32.const 1036) ",") (data $1.1 (i32.const 1048) "\02\00\00\00\12\00\00\00m\00e\00m\00o\00r\00y\00.\00t\00s") @@ -16,6 +18,40 @@ (data $24 (i32.const 1216) "\01") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1220 + i32.lt_s + if + i32.const 34016 + i32.const 34064 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start call $start:memory ) @@ -33,7 +69,6 @@ i32.const 0 i32.const 1056 i32.const 12 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -51,7 +86,6 @@ i32.const 0 i32.const 1056 i32.const 13 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -69,7 +103,6 @@ i32.const 0 i32.const 1056 i32.const 14 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -84,7 +117,6 @@ i32.const 0 i32.const 1056 i32.const 19 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -99,7 +131,6 @@ i32.const 0 i32.const 1056 i32.const 20 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -114,7 +145,6 @@ i32.const 0 i32.const 1056 i32.const 21 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -129,7 +159,6 @@ i32.const 0 i32.const 1056 i32.const 22 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -144,7 +173,6 @@ i32.const 0 i32.const 1056 i32.const 23 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -155,7 +183,6 @@ i32.const 0 i32.const 1056 i32.const 24 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -181,7 +208,6 @@ i32.const 0 i32.const 1056 i32.const 44 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -193,7 +219,6 @@ i32.const 0 i32.const 1056 i32.const 45 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -205,7 +230,6 @@ i32.const 0 i32.const 1056 i32.const 46 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -219,7 +243,6 @@ i32.const 0 i32.const 1056 i32.const 49 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -231,7 +254,6 @@ i32.const 0 i32.const 1056 i32.const 50 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -243,7 +265,6 @@ i32.const 0 i32.const 1056 i32.const 51 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/memset.debug.wat b/tests/compiler/memset.debug.wat index 06ad44229b..7188e9f084 100644 --- a/tests/compiler/memset.debug.wat +++ b/tests/compiler/memset.debug.wat @@ -1,9 +1,10 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -379,4 +380,49 @@ (func $~start call $start:memset ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/memset.release.wat b/tests/compiler/memset.release.wat index 4a0b59732f..e689d3f5ac 100644 --- a/tests/compiler/memset.release.wat +++ b/tests/compiler/memset.release.wat @@ -1,14 +1,49 @@ (module - (type $0 (func (param i32 i32 i32 i32))) - (type $1 (func (param i32 i32 i32))) - (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $memset/dest (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\12\00\00\00m\00e\00m\00s\00e\00t\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $memset/memset (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i64) (local $4 i32) @@ -214,7 +249,6 @@ i32.const 0 i32.const 1056 i32.const 72 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -226,7 +260,6 @@ i32.const 0 i32.const 1056 i32.const 73 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -244,7 +277,6 @@ i32.const 0 i32.const 1056 i32.const 77 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -256,7 +288,6 @@ i32.const 0 i32.const 1056 i32.const 78 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -268,7 +299,6 @@ i32.const 0 i32.const 1056 i32.const 79 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -280,7 +310,6 @@ i32.const 0 i32.const 1056 i32.const 80 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/mutable-globals.debug.wat b/tests/compiler/mutable-globals.debug.wat index 6b2dac9834..24080626c1 100644 --- a/tests/compiler/mutable-globals.debug.wat +++ b/tests/compiler/mutable-globals.debug.wat @@ -2,8 +2,9 @@ (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) (import "mutable-globals" "external" (global $mutable-globals/external (mut i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $mutable-globals/internal (mut i32) (i32.const 124)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 76)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) (global $~lib/memory/__heap_base i32 (i32.const 32844)) @@ -83,4 +84,49 @@ global.set $~started call $start:mutable-globals ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/mutable-globals.release.wat b/tests/compiler/mutable-globals.release.wat index 5b8e61143c..16840cc764 100644 --- a/tests/compiler/mutable-globals.release.wat +++ b/tests/compiler/mutable-globals.release.wat @@ -1,9 +1,11 @@ (module - (type $0 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) (import "mutable-globals" "external" (global $mutable-globals/external (mut i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $mutable-globals/internal (mut i32) (i32.const 124)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data $0 (i32.const 1036) "<") @@ -12,6 +14,40 @@ (export "internal" (global $mutable-globals/internal)) (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start global.get $~started if @@ -26,7 +62,6 @@ i32.const 0 i32.const 1056 i32.const 5 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -37,7 +72,6 @@ i32.const 0 i32.const 1056 i32.const 6 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -56,7 +90,6 @@ i32.const 0 i32.const 1056 i32.const 11 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -67,7 +100,6 @@ i32.const 0 i32.const 1056 i32.const 12 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/new.debug.wat b/tests/compiler/new.debug.wat index f26b604fbe..63c49e3647 100644 --- a/tests/compiler/new.debug.wat +++ b/tests/compiler/new.debug.wat @@ -4,12 +4,13 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $new/ref (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -230,7 +232,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2262,106 +2264,6 @@ local.get $this return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $new/ref - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $new/gen - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $new/ref2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $new/genext - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $new/genext2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $new/genext3 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $new/GenExt - block $new/ns.Ref - block $new/Gen - block $new/Ref - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $new/Ref $new/Gen $new/ns.Ref $new/GenExt $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:new ) @@ -2378,6 +2280,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $new/Ref#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2644,4 +2578,104 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $new/ref + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $new/gen + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $new/ref2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $new/genext + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $new/genext2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $new/genext3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $new/GenExt + block $new/ns.Ref + block $new/Gen + block $new/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $new/Ref $new/Gen $new/ns.Ref $new/GenExt $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/new.release.wat b/tests/compiler/new.release.wat index b952e13bf6..4946caea42 100644 --- a/tests/compiler/new.release.wat +++ b/tests/compiler/new.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (result i32))) (type $2 (func)) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $new/ref (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -38,6 +38,41 @@ (data $8 (i32.const 1440) "\08\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1476 + i32.lt_s + if + i32.const 34272 + i32.const 34320 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -76,7 +111,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$116 + block $__inlined_func$~lib/rt/itcms/Object#unlink$117 local.get $1 i32.load offset=4 i32.const -4 @@ -100,7 +135,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$116 + br $__inlined_func$~lib/rt/itcms/Object#unlink$117 end local.get $1 i32.load offset=8 @@ -143,7 +178,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/number.debug.wat b/tests/compiler/number.debug.wat index a6dc854df5..b7c07afbcb 100644 --- a/tests/compiler/number.debug.wat +++ b/tests/compiler/number.debug.wat @@ -6,8 +6,8 @@ (type $4 (func)) (type $5 (func (param i32 i32 i32))) (type $6 (func (param f64) (result i32))) - (type $7 (func (param f32) (result i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param f32) (result i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) (type $11 (func (param i32 i64 i32))) @@ -18,8 +18,9 @@ (type $16 (func (param i32 i32 i32) (result i32))) (type $17 (func (param i32 f64 i32) (result i32))) (type $18 (func (param f64 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $number/a (mut i32) (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -31,6 +32,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -330,7 +332,7 @@ if i32.const 448 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4274,58 +4276,6 @@ end return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1056 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - unreachable - ) (func $~start call $start:number ) @@ -4342,6 +4292,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -5552,4 +5534,56 @@ local.get $5 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1056 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/number.release.wat b/tests/compiler/number.release.wat index 71d88ecec9..a552fb0c0a 100644 --- a/tests/compiler/number.release.wat +++ b/tests/compiler/number.release.wat @@ -1,15 +1,15 @@ (module (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) - (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (param i64 i64 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $number/a (mut i32) (i32.const 1)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -79,6 +79,41 @@ (data $31 (i32.const 4656) "\04\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4676 + i32.lt_s + if + i32.const 37472 + i32.const 37520 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -398,7 +433,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$165 + block $__inlined_func$~lib/rt/itcms/Object#unlink$166 local.get $1 i32.load offset=4 i32.const -4 @@ -422,7 +457,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$165 + br $__inlined_func$~lib/rt/itcms/Object#unlink$166 end local.get $1 i32.load offset=8 @@ -465,7 +500,7 @@ if i32.const 1472 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/object-literal.debug.wat b/tests/compiler/object-literal.debug.wat index 49aa74b6e3..1bd832ceea 100644 --- a/tests/compiler/object-literal.debug.wat +++ b/tests/compiler/object-literal.debug.wat @@ -7,22 +7,24 @@ (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 f64))) (type $7 (func (param i32) (result f64))) - (type $8 (func (param i32 i64))) - (type $9 (func (param i32) (result i64))) - (type $10 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 i64))) + (type $10 (func (param i32) (result i64))) (type $11 (func (param i32 i32 i64) (result i32))) (type $12 (func (result i32))) (type $13 (func (param i32 i32 i32 i32 i32) (result i32))) (type $14 (func (param i32 f32))) (type $15 (func (param i32) (result f32))) (type $16 (func (param i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -191,7 +193,7 @@ if i32.const 176 i32.const 240 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2826,131 +2828,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 176 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 288 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $object-literal/Managed~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=4 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $object-literal/MixedOmitted~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load offset=4 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $object-literal/OmittedFoo~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=4 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=8 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=12 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=16 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=20 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=24 - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=28 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $object-literal/OmittedFoo - block $object-literal/MixedOmitted - block $object-literal/OmittedTypes - block $object-literal/Managed - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $object-literal/Managed $object-literal/OmittedTypes $object-literal/MixedOmitted $object-literal/OmittedFoo $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $object-literal/Managed~visit - return - end - return - end - local.get $0 - local.get $1 - call $object-literal/MixedOmitted~visit - return - end - local.get $0 - local.get $1 - call $object-literal/OmittedFoo~visit - return - end - unreachable - ) (func $~start call $start:object-literal ) @@ -2967,6 +2844,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $object-literal/Managed#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -4518,4 +4427,129 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 176 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 288 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $object-literal/Managed~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $object-literal/MixedOmitted~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $object-literal/OmittedFoo~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=8 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=12 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=16 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=20 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=24 + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=28 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $object-literal/OmittedFoo + block $object-literal/MixedOmitted + block $object-literal/OmittedTypes + block $object-literal/Managed + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $object-literal/Managed $object-literal/OmittedTypes $object-literal/MixedOmitted $object-literal/OmittedFoo $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $object-literal/Managed~visit + return + end + return + end + local.get $0 + local.get $1 + call $object-literal/MixedOmitted~visit + return + end + local.get $0 + local.get $1 + call $object-literal/OmittedFoo~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/object-literal.release.wat b/tests/compiler/object-literal.release.wat index 872f7b5c5f..7801abbc13 100644 --- a/tests/compiler/object-literal.release.wat +++ b/tests/compiler/object-literal.release.wat @@ -7,7 +7,7 @@ (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) @@ -48,6 +48,41 @@ (data $15.1 (i32.const 1736) " ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1748 + i32.lt_s + if + i32.const 34544 + i32.const 34592 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -239,7 +274,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$83 + block $__inlined_func$~lib/util/string/compareImpl$81 loop $while-continue|1 local.get $0 local.tee $3 @@ -259,7 +294,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$83 + br_if $__inlined_func$~lib/util/string/compareImpl$81 local.get $2 i32.const 2 i32.add @@ -1145,7 +1180,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$205 + block $__inlined_func$~lib/rt/itcms/Object#unlink$206 local.get $0 i32.load offset=4 i32.const -4 @@ -1169,7 +1204,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$205 + br $__inlined_func$~lib/rt/itcms/Object#unlink$206 end local.get $0 i32.load offset=8 @@ -1212,7 +1247,7 @@ if i32.const 1200 i32.const 1264 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2085,7 +2120,7 @@ i32.const 1 i32.shl local.set $3 - block $__inlined_func$~lib/string/String#substring$210 + block $__inlined_func$~lib/string/String#substring$211 local.get $2 i32.const 0 local.get $2 @@ -2106,7 +2141,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1568 local.set $0 - br $__inlined_func$~lib/string/String#substring$210 + br $__inlined_func$~lib/string/String#substring$211 end local.get $3 i32.eqz @@ -2123,7 +2158,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1056 local.set $0 - br $__inlined_func$~lib/string/String#substring$210 + br $__inlined_func$~lib/string/String#substring$211 end global.get $~lib/memory/__stack_pointer local.get $2 diff --git a/tests/compiler/operator-overload-non-ambiguity.debug.wat b/tests/compiler/operator-overload-non-ambiguity.debug.wat index af1c4b6144..34bb7279ca 100644 --- a/tests/compiler/operator-overload-non-ambiguity.debug.wat +++ b/tests/compiler/operator-overload-non-ambiguity.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -225,7 +227,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2265,64 +2267,6 @@ i32.const 1 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $operator-overload-non-ambiguity/T1 - block $operator-overload-non-ambiguity/P2 - block $operator-overload-non-ambiguity/Base - block $operator-overload-non-ambiguity/P1 - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $operator-overload-non-ambiguity/P1 $operator-overload-non-ambiguity/Base $operator-overload-non-ambiguity/P2 $operator-overload-non-ambiguity/T1 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:operator-overload-non-ambiguity ) @@ -2339,6 +2283,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $operator-overload-non-ambiguity/Base#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2611,4 +2587,62 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $operator-overload-non-ambiguity/T1 + block $operator-overload-non-ambiguity/P2 + block $operator-overload-non-ambiguity/Base + block $operator-overload-non-ambiguity/P1 + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $operator-overload-non-ambiguity/P1 $operator-overload-non-ambiguity/Base $operator-overload-non-ambiguity/P2 $operator-overload-non-ambiguity/T1 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/operator-overload-non-ambiguity.release.wat b/tests/compiler/operator-overload-non-ambiguity.release.wat index 375613c57c..fe95fcf707 100644 --- a/tests/compiler/operator-overload-non-ambiguity.release.wat +++ b/tests/compiler/operator-overload-non-ambiguity.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $9 (i32.const 1536) "\08\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1572 + i32.lt_s + if + i32.const 34368 + i32.const 34416 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -302,7 +337,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$116 + block $__inlined_func$~lib/rt/itcms/Object#unlink$117 local.get $1 i32.load offset=4 i32.const -4 @@ -326,7 +361,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$116 + br $__inlined_func$~lib/rt/itcms/Object#unlink$117 end local.get $1 i32.load offset=8 @@ -369,7 +404,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/optional-typeparameters.debug.wat b/tests/compiler/optional-typeparameters.debug.wat index f0ccf39b01..f2aafd7ee5 100644 --- a/tests/compiler/optional-typeparameters.debug.wat +++ b/tests/compiler/optional-typeparameters.debug.wat @@ -4,13 +4,14 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) (type $10 (func (param i32 f64 f64) (result f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,6 +23,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -33,6 +35,7 @@ (global $~lib/memory/__data_end i32 (i32.const 456)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33224)) (global $~lib/memory/__heap_base i32 (i32.const 33224)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -238,7 +241,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2276,118 +2279,6 @@ i32.eq drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $optional-typeparameters/tConcrete - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $optional-typeparameters/tDerived - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $optional-typeparameters/tMethodDerived - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $optional-typeparameters/tMethodDerived2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array<~lib/string/String>#get:dataStart (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/array/Array<~lib/string/String>#get:length_ (param $this i32) (result i32) - local.get $this - i32.load offset=12 - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $optional-typeparameters/TestMethodDerived2 - block $~lib/array/Array<~lib/string/String> - block $optional-typeparameters/TestMethodDerived<~lib/string/String> - block $"optional-typeparameters/TestDerived" - block $"optional-typeparameters/TestConcrete" - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"optional-typeparameters/TestConcrete" $"optional-typeparameters/TestDerived" $optional-typeparameters/TestMethodDerived<~lib/string/String> $~lib/array/Array<~lib/string/String> $optional-typeparameters/TestMethodDerived2 $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - return - end - unreachable - ) (func $~start call $start:optional-typeparameters ) @@ -2404,6 +2295,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $"optional-typeparameters/TestConcrete#constructor" (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2668,6 +2591,146 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $optional-typeparameters/tConcrete + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $optional-typeparameters/tDerived + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $optional-typeparameters/tMethodDerived + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $optional-typeparameters/tMethodDerived2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array<~lib/string/String>#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/array/Array<~lib/string/String>#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $optional-typeparameters/TestMethodDerived2 + block $~lib/array/Array<~lib/string/String> + block $optional-typeparameters/TestMethodDerived<~lib/string/String> + block $"optional-typeparameters/TestDerived" + block $"optional-typeparameters/TestConcrete" + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"optional-typeparameters/TestConcrete" $"optional-typeparameters/TestDerived" $optional-typeparameters/TestMethodDerived<~lib/string/String> $~lib/array/Array<~lib/string/String> $optional-typeparameters/TestMethodDerived2 $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + return + end + unreachable + ) (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) @@ -2681,6 +2744,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -2738,32 +2805,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/optional-typeparameters.release.wat b/tests/compiler/optional-typeparameters.release.wat index 9dd537f30a..7b7d8e8fe7 100644 --- a/tests/compiler/optional-typeparameters.release.wat +++ b/tests/compiler/optional-typeparameters.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -36,6 +36,41 @@ (data $8 (i32.const 1440) "\t\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00\02A\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1480 + i32.lt_s + if + i32.const 34272 + i32.const 34320 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -74,7 +109,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$131 + block $__inlined_func$~lib/rt/itcms/Object#unlink$132 local.get $1 i32.load offset=4 i32.const -4 @@ -98,7 +133,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$131 + br $__inlined_func$~lib/rt/itcms/Object#unlink$132 end local.get $1 i32.load offset=8 @@ -141,7 +176,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/overflow.debug.wat b/tests/compiler/overflow.debug.wat index 66d363d737..be3b4d4efb 100644 --- a/tests/compiler/overflow.debug.wat +++ b/tests/compiler/overflow.debug.wat @@ -1,7 +1,8 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -782,4 +783,49 @@ (func $~start call $start:overflow ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/polyfills.debug.wat b/tests/compiler/polyfills.debug.wat index 38b080c31a..c98234ecae 100644 --- a/tests/compiler/polyfills.debug.wat +++ b/tests/compiler/polyfills.debug.wat @@ -1,9 +1,10 @@ (module (type $0 (func (param i32) (result i32))) - (type $1 (func (param i64) (result i64))) - (type $2 (func)) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i64) (result i64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -508,4 +509,49 @@ (func $~start call $start:polyfills ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/portable-conversions.debug.wat b/tests/compiler/portable-conversions.debug.wat index b166b9278f..88ea05a110 100644 --- a/tests/compiler/portable-conversions.debug.wat +++ b/tests/compiler/portable-conversions.debug.wat @@ -1,11 +1,12 @@ (module (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $portable-conversions/i (mut i32) (i32.const 1)) (global $portable-conversions/I (mut i64) (i64.const 1)) (global $portable-conversions/f (mut f32) (f32.const 1)) (global $portable-conversions/F (mut f64) (f64.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 92)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32860)) (global $~lib/memory/__heap_base i32 (i32.const 32860)) @@ -626,4 +627,49 @@ (func $~start call $start:portable-conversions ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32880 + i32.const 32928 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/possibly-null.debug.wat b/tests/compiler/possibly-null.debug.wat index f528abfabe..54e407d01c 100644 --- a/tests/compiler/possibly-null.debug.wat +++ b/tests/compiler/possibly-null.debug.wat @@ -1,13 +1,14 @@ (module (type $0 (func (param i32))) (type $1 (func (param i32 i32))) - (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) (type $4 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__data_end i32 (i32.const 8)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 0) (table $0 1 1 funcref) (elem $0 (i32.const 1)) @@ -282,65 +283,6 @@ unreachable end ) - (func $possibly-null/testLogicalAnd (param $a i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $a - if (result i32) - local.get $a - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $possibly-null/requireNonNull - else - i32.const 0 - end - drop - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $possibly-null/testLogicalOr (param $a i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $a - i32.eqz - if (result i32) - i32.const 1 - else - local.get $a - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $possibly-null/requireNonNull - i32.const 0 - i32.ne - end - drop - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $export:possibly-null/testTrue (param $0 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -649,4 +591,95 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $possibly-null/testLogicalAnd (param $a i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + if (result i32) + local.get $a + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $possibly-null/requireNonNull + else + i32.const 0 + end + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $possibly-null/testLogicalOr (param $a i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + i32.eqz + if (result i32) + i32.const 1 + else + local.get $a + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $possibly-null/requireNonNull + i32.const 0 + i32.ne + end + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/possibly-null.release.wat b/tests/compiler/possibly-null.release.wat index a187c01fee..84e9725448 100644 --- a/tests/compiler/possibly-null.release.wat +++ b/tests/compiler/possibly-null.release.wat @@ -1,8 +1,9 @@ (module (type $0 (func (param i32 i32))) (type $1 (func (param i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func)) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33792)) (memory $0 0) (export "memory" (memory $0)) @@ -24,6 +25,37 @@ (export "testLogicalOrMulti" (func $export:possibly-null/testLogicalOrMulti)) (export "testAssign" (func $export:possibly-null/testAssign)) (export "testNeverNull" (func $export:possibly-null/testTrue)) + (func $~lib/builtins/abort + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1024 + i32.lt_s + if + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33824 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33872 + i32.store offset=4 + i32.const 33824 + i32.const 33872 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $export:possibly-null/testWhile3 (param $0 i32) (param $1 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -75,10 +107,6 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable ) @@ -129,10 +157,6 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable ) @@ -145,10 +169,6 @@ i32.const 1024 i32.lt_s if - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -177,10 +197,6 @@ i32.const 1024 i32.lt_s if - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -201,20 +217,16 @@ i32.const 1024 i32.lt_s if - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$possibly-null/testNotNeNullContinuation$24 + block $__inlined_func$possibly-null/testNotNeNullContinuation$20 local.get $0 i32.eqz - br_if $__inlined_func$possibly-null/testNotNeNullContinuation$24 + br_if $__inlined_func$possibly-null/testNotNeNullContinuation$20 end global.get $~lib/memory/__stack_pointer i32.const 4 @@ -230,10 +242,6 @@ i32.const 1024 i32.lt_s if - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -288,10 +296,6 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable ) @@ -335,10 +339,6 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable ) diff --git a/tests/compiler/reexport.debug.wat b/tests/compiler/reexport.debug.wat index 9e784a9395..89dc56252b 100644 --- a/tests/compiler/reexport.debug.wat +++ b/tests/compiler/reexport.debug.wat @@ -4,11 +4,11 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) @@ -19,6 +19,7 @@ (global $exports/Car.TIRES i32 (i32.const 4)) (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) (global $exports/outer.inner.a i32 (i32.const 42)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -30,6 +31,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -271,7 +273,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2303,62 +2305,6 @@ ) (func $export-default/theDefault ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $reexport/car - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $exports/Car - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:reexport ) @@ -2375,6 +2321,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $exports/Car#constructor (param $this i32) (param $doors i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2534,4 +2512,60 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $reexport/car + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $exports/Car + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/reexport.release.wat b/tests/compiler/reexport.release.wat index b6b81aebab..3f7ba42afc 100644 --- a/tests/compiler/reexport.release.wat +++ b/tests/compiler/reexport.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) (type $6 (func (param i32) (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) @@ -51,6 +51,41 @@ (export "renamed_default" (func $export-default/theDefault)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1512 + i32.lt_s + if + i32.const 34304 + i32.const 34352 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -89,7 +124,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$119 + block $__inlined_func$~lib/rt/itcms/Object#unlink$120 local.get $1 i32.load offset=4 i32.const -4 @@ -113,7 +148,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$119 + br $__inlined_func$~lib/rt/itcms/Object#unlink$120 end local.get $1 i32.load offset=8 @@ -156,7 +191,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/rereexport.debug.wat b/tests/compiler/rereexport.debug.wat index 069f46a726..e8d39d4615 100644 --- a/tests/compiler/rereexport.debug.wat +++ b/tests/compiler/rereexport.debug.wat @@ -4,17 +4,18 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $export/c i32 (i32.const 3)) (global $exports/Car.TIRES i32 (i32.const 4)) (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) (global $exports/outer.inner.a i32 (i32.const 42)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -26,6 +27,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -264,7 +266,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2290,76 +2292,6 @@ ) (func $export-default/theDefault ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $rereexport/car - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $rereexport/exportsNamespaceCar - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - global.get $reexport/car - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $exports/Car - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:rereexport ) @@ -2376,6 +2308,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $exports/Car#constructor (param $this i32) (param $doors i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2651,4 +2615,74 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $rereexport/car + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $rereexport/exportsNamespaceCar + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $reexport/car + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $exports/Car + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $exports/Car $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/rereexport.release.wat b/tests/compiler/rereexport.release.wat index 30e4698072..57307b1098 100644 --- a/tests/compiler/rereexport.release.wat +++ b/tests/compiler/rereexport.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $export/a i32 (i32.const 1)) (global $export/b i32 (i32.const 2)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -47,6 +47,41 @@ (export "renamed_default" (func $export-default/theDefault)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1560 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -85,7 +120,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$120 + block $__inlined_func$~lib/rt/itcms/Object#unlink$121 local.get $1 i32.load offset=4 i32.const -4 @@ -109,7 +144,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$120 + br $__inlined_func$~lib/rt/itcms/Object#unlink$121 end local.get $1 i32.load offset=8 @@ -152,7 +187,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-access.debug.wat b/tests/compiler/resolve-access.debug.wat index a2176400d2..f08e544e1a 100644 --- a/tests/compiler/resolve-access.debug.wat +++ b/tests/compiler/resolve-access.debug.wat @@ -7,8 +7,8 @@ (type $5 (func)) (type $6 (func (result i32))) (type $7 (func (param i64 i32) (result i32))) - (type $8 (func (param i32 i64 i32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 i64 i32))) (type $10 (func (param i32 i32 i64) (result i32))) (type $11 (func (param i32 i32 i32) (result i32))) (type $12 (func (param i64) (result i32))) @@ -17,10 +17,12 @@ (type $15 (func (param i32) (result i64))) (type $16 (func (param i32 i32) (result i64))) (type $17 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -32,6 +34,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 2272)) @@ -246,7 +249,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2968,97 +2971,6 @@ call $~lib/util/number/utoa32 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1136 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2192 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $resolve-access/Container - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $resolve-access/Container $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - return - end - unreachable - ) (func $~start memory.size i32.const 16 @@ -3091,6 +3003,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i64) (local $value i64) (local $3 i32) @@ -3115,7 +3059,7 @@ if i32.const 256 i32.const 464 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3336,58 +3280,6 @@ local.get $1 return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) (local $bufferSize i32) (local $buffer i32) @@ -3419,6 +3311,10 @@ local.get $array local.get $buffer i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $buffer i32.const 0 @@ -3803,4 +3699,155 @@ local.get $12 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1136 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2192 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $resolve-access/Container + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $resolve-access/Container $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/resolve-access.release.wat b/tests/compiler/resolve-access.release.wat index 427ef20e2d..37122b3f3a 100644 --- a/tests/compiler/resolve-access.release.wat +++ b/tests/compiler/resolve-access.release.wat @@ -2,13 +2,13 @@ (type $0 (func (result i32))) (type $1 (func (param i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (param i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -52,6 +52,41 @@ (export "propertyAccess" (func $resolve-access/propertyAccess)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3328 + i32.lt_s + if + i32.const 36128 + i32.const 36176 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -909,7 +944,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$143 + block $__inlined_func$~lib/rt/itcms/Object#unlink$144 local.get $0 i32.load offset=4 i32.const -4 @@ -933,7 +968,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$143 + br $__inlined_func$~lib/rt/itcms/Object#unlink$144 end local.get $0 i32.load offset=8 @@ -976,7 +1011,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2400,7 +2435,7 @@ if i32.const 1280 i32.const 1488 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-binary.debug.wat b/tests/compiler/resolve-binary.debug.wat index d10576390f..ebf9ae5775 100644 --- a/tests/compiler/resolve-binary.debug.wat +++ b/tests/compiler/resolve-binary.debug.wat @@ -5,8 +5,8 @@ (type $3 (func (param i32))) (type $4 (func)) (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i64 i32))) @@ -18,11 +18,13 @@ (type $16 (func (param i32 f64 i32) (result i32))) (type $17 (func (param f64 i32) (result i32))) (type $18 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $resolve-binary/a (mut i32) (i32.const 0)) (global $resolve-binary/f (mut f64) (f64.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -466,7 +468,7 @@ if i32.const 576 i32.const 640 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -5560,95 +5562,6 @@ local.get $left return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $resolve-binary/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $resolve-binary/bar - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $resolve-binary/bar2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $resolve-binary/baz - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 576 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 384 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1184 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2240 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $resolve-binary/Baz - block $resolve-binary/Bar - block $resolve-binary/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-binary/Foo $resolve-binary/Bar $resolve-binary/Baz $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - unreachable - ) (func $~start call $start:resolve-binary ) @@ -5761,6 +5674,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $resolve-binary/Foo#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -7545,4 +7490,93 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $resolve-binary/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $resolve-binary/bar + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $resolve-binary/bar2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $resolve-binary/baz + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 576 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 384 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1184 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2240 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $resolve-binary/Baz + block $resolve-binary/Bar + block $resolve-binary/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-binary/Foo $resolve-binary/Bar $resolve-binary/Baz $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/resolve-binary.release.wat b/tests/compiler/resolve-binary.release.wat index 73db3a219c..e7caa4525c 100644 --- a/tests/compiler/resolve-binary.release.wat +++ b/tests/compiler/resolve-binary.release.wat @@ -2,14 +2,14 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (result i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32))) - (type $5 (func (param i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (param i32))) + (type $6 (func (param i32 i32))) (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64))) (type $9 (func (param i64 i64 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $resolve-binary/a (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -237,6 +237,41 @@ (data $45 (i32.const 11216) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 11248 + i32.lt_s + if + i32.const 44048 + i32.const 44096 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -350,7 +385,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$81 + block $__inlined_func$~lib/util/string/compareImpl$80 loop $while-continue|1 local.get $0 local.tee $3 @@ -370,7 +405,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$81 + br_if $__inlined_func$~lib/util/string/compareImpl$80 local.get $2 i32.const 2 i32.add @@ -557,7 +592,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$165 + block $__inlined_func$~lib/rt/itcms/Object#unlink$166 local.get $1 i32.load offset=4 i32.const -4 @@ -581,7 +616,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$165 + br $__inlined_func$~lib/rt/itcms/Object#unlink$166 end local.get $1 i32.load offset=8 @@ -624,7 +659,7 @@ if i32.const 1600 i32.const 1664 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-elementaccess.debug.wat b/tests/compiler/resolve-elementaccess.debug.wat index f6a7e9d7e2..1eefb19fae 100644 --- a/tests/compiler/resolve-elementaccess.debug.wat +++ b/tests/compiler/resolve-elementaccess.debug.wat @@ -5,8 +5,8 @@ (type $3 (func (param i32))) (type $4 (func (param i32 i32 i32))) (type $5 (func)) - (type $6 (func (param i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32))) @@ -19,10 +19,12 @@ (type $17 (func (param i32 i32 f32))) (type $18 (func (param i32 i32) (result f32))) (type $19 (func (param f32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -269,7 +271,7 @@ if i32.const 336 i32.const 400 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4294,108 +4296,6 @@ call $~lib/util/number/utoa32 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $resolve-elementaccess/arr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $resolve-elementaccess/buf - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 144 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2544 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 3600 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $resolve-elementaccess/Buffer~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/typedarray/Uint8Array - block $resolve-elementaccess/Buffer - block $~lib/typedarray/Float32Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Float32Array $resolve-elementaccess/Buffer $~lib/typedarray/Uint8Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $resolve-elementaccess/Buffer~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - unreachable - ) (func $~start call $start:resolve-elementaccess ) @@ -4412,6 +4312,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) (local $buffer i32) (local $4 i32) @@ -4587,7 +4519,7 @@ if i32.const 336 i32.const 544 - i32.const 1315 + i32.const 1316 i32.const 64 call $~lib/builtins/abort unreachable @@ -4635,7 +4567,7 @@ if i32.const 336 i32.const 544 - i32.const 1304 + i32.const 1305 i32.const 64 call $~lib/builtins/abort unreachable @@ -4857,7 +4789,7 @@ if i32.const 336 i32.const 544 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -4900,7 +4832,7 @@ if i32.const 336 i32.const 544 - i32.const 167 + i32.const 168 i32.const 45 call $~lib/builtins/abort unreachable @@ -5504,4 +5436,106 @@ local.get $12 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $resolve-elementaccess/arr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $resolve-elementaccess/buf + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2544 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 3600 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $resolve-elementaccess/Buffer~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/typedarray/Uint8Array + block $resolve-elementaccess/Buffer + block $~lib/typedarray/Float32Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Float32Array $resolve-elementaccess/Buffer $~lib/typedarray/Uint8Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $resolve-elementaccess/Buffer~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/resolve-elementaccess.release.wat b/tests/compiler/resolve-elementaccess.release.wat index 8a6fc68b91..220280360a 100644 --- a/tests/compiler/resolve-elementaccess.release.wat +++ b/tests/compiler/resolve-elementaccess.release.wat @@ -3,8 +3,8 @@ (type $1 (func)) (type $2 (func (param i32))) (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32) (result f32))) (type $7 (func (param i32 i32 f32))) (type $8 (func (param i32) (result i32))) @@ -14,7 +14,7 @@ (type $12 (func (param i64 i64 i32 i64 i32) (result i32))) (type $13 (func (param f64) (result i32))) (type $14 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -90,6 +90,41 @@ (data $32 (i32.const 4800) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\01\19\00\00A\00\00\00A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4832 + i32.lt_s + if + i32.const 37632 + i32.const 37680 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -457,7 +492,7 @@ if i32.const 1360 i32.const 1568 - i32.const 167 + i32.const 168 i32.const 45 call $~lib/builtins/abort unreachable @@ -507,7 +542,7 @@ if i32.const 1360 i32.const 1568 - i32.const 1304 + i32.const 1305 i32.const 64 call $~lib/builtins/abort unreachable @@ -640,7 +675,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$97 + block $__inlined_func$~lib/util/string/compareImpl$94 loop $while-continue|1 local.get $0 local.tee $3 @@ -660,7 +695,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$97 + br_if $__inlined_func$~lib/util/string/compareImpl$94 local.get $2 i32.const 2 i32.add @@ -718,7 +753,7 @@ if i32.const 1360 i32.const 1568 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -768,7 +803,7 @@ if i32.const 1360 i32.const 1568 - i32.const 1315 + i32.const 1316 i32.const 64 call $~lib/builtins/abort unreachable @@ -1308,7 +1343,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$153 + block $__inlined_func$~lib/rt/itcms/Object#unlink$154 local.get $0 i32.load offset=4 i32.const -4 @@ -1332,7 +1367,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$153 + br $__inlined_func$~lib/rt/itcms/Object#unlink$154 end local.get $0 i32.load offset=8 @@ -1375,7 +1410,7 @@ if i32.const 1360 i32.const 1424 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-function-expression.debug.wat b/tests/compiler/resolve-function-expression.debug.wat index c1640f112a..26ef53eb10 100644 --- a/tests/compiler/resolve-function-expression.debug.wat +++ b/tests/compiler/resolve-function-expression.debug.wat @@ -12,8 +12,9 @@ (type $10 (func (param i64 i32) (result i32))) (type $11 (func (param i32 i64 i32 i32))) (type $12 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -25,6 +26,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -33,6 +35,7 @@ (global $~lib/memory/__data_end i32 (i32.const 2424)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35192)) (global $~lib/memory/__heap_base i32 (i32.const 35192)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 44) "L\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00<\00\00\00r\00e\00s\00o\00l\00v\00e\00-\00f\00u\00n\00c\00t\00i\00o\00n\00-\00e\00x\00p\00r\00e\00s\00s\00i\00o\00n\00.\00t\00s\00") @@ -312,7 +315,7 @@ if i32.const 624 i32.const 688 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2810,76 +2813,6 @@ i32.const 0 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 624 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 432 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1232 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2288 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28i32%29=>i32> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>~visit - return - end - unreachable - ) (func $~start call $start:resolve-function-expression ) @@ -2896,6 +2829,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -3082,30 +3047,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) (local $sign i32) (local $out i32) @@ -3288,4 +3229,102 @@ local.get $14 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 624 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 432 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1232 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2288 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/resolve-function-expression.release.wat b/tests/compiler/resolve-function-expression.release.wat index 6837fffa79..faf7db0062 100644 --- a/tests/compiler/resolve-function-expression.release.wat +++ b/tests/compiler/resolve-function-expression.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -56,6 +56,41 @@ (elem $0 (i32.const 1) $start:resolve-function-expression~anonymous|0 $start:resolve-function-expression~anonymous|1 $start:resolve-function-expression~anonymous|2) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3448 + i32.lt_s + if + i32.const 36240 + i32.const 36288 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -94,7 +129,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$124 + block $__inlined_func$~lib/rt/itcms/Object#unlink$125 local.get $1 i32.load offset=4 i32.const -4 @@ -118,7 +153,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$124 + br $__inlined_func$~lib/rt/itcms/Object#unlink$125 end local.get $1 i32.load offset=8 @@ -161,7 +196,7 @@ if i32.const 1648 i32.const 1712 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1205,7 +1240,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$80 + block $__inlined_func$~lib/util/string/compareImpl$78 loop $while-continue|1 local.get $1 local.tee $0 @@ -1225,7 +1260,7 @@ local.get $0 local.get $2 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$80 + br_if $__inlined_func$~lib/util/string/compareImpl$78 local.get $5 i32.const 2 i32.add diff --git a/tests/compiler/resolve-localortype.debug.wat b/tests/compiler/resolve-localortype.debug.wat index c070663650..c89f205adc 100644 --- a/tests/compiler/resolve-localortype.debug.wat +++ b/tests/compiler/resolve-localortype.debug.wat @@ -2,10 +2,11 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32 i32 i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__data_end i32 (i32.const 8)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 0) (table $0 1 1 funcref) (elem $0 (i32.const 1)) @@ -28,6 +29,25 @@ unreachable end ) + (func $export:resolve-localortype/test (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $resolve-localortype/test + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $resolve-localortype/test (param $string i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -53,23 +73,36 @@ local.get $1 return ) - (func $export:resolve-localortype/test (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $0 + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 i32.store - local.get $0 - call $resolve-localortype/test - local.set $1 + local.get $4 + local.get $fileName + local.set $4 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/resolve-localortype.release.wat b/tests/compiler/resolve-localortype.release.wat index 7fe06f9905..89e5680445 100644 --- a/tests/compiler/resolve-localortype.release.wat +++ b/tests/compiler/resolve-localortype.release.wat @@ -1,54 +1,71 @@ (module - (type $0 (func (param i32 i32 i32 i32))) - (type $1 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33792)) (memory $0 0) (export "memory" (memory $0)) (export "test" (func $export:resolve-localortype/test)) - (func $export:resolve-localortype/test (param $0 i32) (result i32) + (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - block $folding-inner0 + i32.const 1024 + i32.lt_s + if global.get $~lib/memory/__stack_pointer - i32.const 1024 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 1024 - i32.lt_s - br_if $folding-inner0 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 + i32.const 33824 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store + i32.const 33872 + i32.store offset=4 + i32.const 33824 + i32.const 33872 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $0 - return + unreachable end - i32.const 33824 - i32.const 33872 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable + ) + (func $export:resolve-localortype/test (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 ) ) diff --git a/tests/compiler/resolve-nested.debug.wat b/tests/compiler/resolve-nested.debug.wat index 41ee1e9f62..716f4f3a49 100644 --- a/tests/compiler/resolve-nested.debug.wat +++ b/tests/compiler/resolve-nested.debug.wat @@ -2,7 +2,7 @@ (type $0 (func (param i32 i32 i32))) (type $1 (func (param i32 i32 i32 i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $resolve-nested/Outer.Inner.a (mut i32) (i32.const 0)) (global $resolve-nested/Outer.Inner.b (mut i32) (i32.const 0)) (global $resolve-nested/Outer.Inner.c (mut i32) (i32.const 0)) @@ -20,6 +20,7 @@ (global $~lib/memory/__data_end i32 (i32.const 8)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 0) (table $0 1 1 funcref) (elem $0 (i32.const 1)) @@ -64,4 +65,36 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/resolve-nested.release.wat b/tests/compiler/resolve-nested.release.wat index 76459d8f80..552479695a 100644 --- a/tests/compiler/resolve-nested.release.wat +++ b/tests/compiler/resolve-nested.release.wat @@ -1,27 +1,49 @@ (module - (type $0 (func (param i32 i32 i32 i32))) - (type $1 (func (param i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33792)) (memory $0 0) (export "memory" (memory $0)) (export "outer" (func $export:resolve-nested/outer)) - (func $export:resolve-nested/outer (param $0 i32) (param $1 i32) (param $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer + (func $~stack_check global.get $~lib/memory/__stack_pointer i32.const 1024 i32.lt_s if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33824 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33872 + i32.store offset=4 i32.const 33824 i32.const 33872 i32.const 1 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer unreachable end + ) + (func $export:resolve-nested/outer (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer local.get $0 i32.store diff --git a/tests/compiler/resolve-new.debug.wat b/tests/compiler/resolve-new.debug.wat index a1724b824f..d534332700 100644 --- a/tests/compiler/resolve-new.debug.wat +++ b/tests/compiler/resolve-new.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -225,7 +227,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2247,62 +2249,6 @@ ) (func $resolve-new/Foo#bar (param $this i32) ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $resolve-new/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $resolve-new/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-new/Foo $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:resolve-new ) @@ -2319,6 +2265,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $resolve-new/Foo#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2428,4 +2406,60 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $resolve-new/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $resolve-new/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-new/Foo $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/resolve-new.release.wat b/tests/compiler/resolve-new.release.wat index ac44b8fd07..ac9deb070d 100644 --- a/tests/compiler/resolve-new.release.wat +++ b/tests/compiler/resolve-new.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -33,6 +33,41 @@ (data $8 (i32.const 1440) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1464 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -71,7 +106,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$112 + block $__inlined_func$~lib/rt/itcms/Object#unlink$113 local.get $1 i32.load offset=4 i32.const -4 @@ -95,7 +130,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$112 + br $__inlined_func$~lib/rt/itcms/Object#unlink$113 end local.get $1 i32.load offset=8 @@ -138,7 +173,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-propertyaccess.debug.wat b/tests/compiler/resolve-propertyaccess.debug.wat index 06b17954f1..1e22fb2b47 100644 --- a/tests/compiler/resolve-propertyaccess.debug.wat +++ b/tests/compiler/resolve-propertyaccess.debug.wat @@ -5,15 +5,16 @@ (type $3 (func (param i32 i32) (result i32))) (type $4 (func)) (type $5 (func (param i32 i32 i32))) - (type $6 (func (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (param i32 i64 i32))) (type $10 (func (param i64 i32) (result i32))) (type $11 (func (param i32 i64 i32 i32))) (type $12 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $resolve-propertyaccess/Namespace.member i32 (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -25,6 +26,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -312,7 +314,7 @@ if i32.const 448 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2827,61 +2829,6 @@ i32.const 8 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1056 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $resolve-propertyaccess/Class - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-propertyaccess/Class $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:resolve-propertyaccess ) @@ -2898,6 +2845,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -3531,4 +3510,59 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1056 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $resolve-propertyaccess/Class + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-propertyaccess/Class $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/resolve-propertyaccess.release.wat b/tests/compiler/resolve-propertyaccess.release.wat index fc8a3c80bd..84ebe0f4ec 100644 --- a/tests/compiler/resolve-propertyaccess.release.wat +++ b/tests/compiler/resolve-propertyaccess.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -70,6 +70,41 @@ (data $27 (i32.const 3680) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3704 + i32.lt_s + if + i32.const 36496 + i32.const 36544 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -491,7 +526,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$126 + block $__inlined_func$~lib/rt/itcms/Object#unlink$127 local.get $1 i32.load offset=4 i32.const -4 @@ -515,7 +550,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$126 + br $__inlined_func$~lib/rt/itcms/Object#unlink$127 end local.get $1 i32.load offset=8 @@ -558,7 +593,7 @@ if i32.const 1472 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/resolve-ternary.debug.wat b/tests/compiler/resolve-ternary.debug.wat index ff33c0b57a..eebc1ae72a 100644 --- a/tests/compiler/resolve-ternary.debug.wat +++ b/tests/compiler/resolve-ternary.debug.wat @@ -17,8 +17,9 @@ (type $15 (func (param i32 f64 i32) (result i32))) (type $16 (func (param f64 i32) (result i32))) (type $17 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $resolve-ternary/b (mut i32) (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -30,6 +31,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -47,6 +49,7 @@ (global $~lib/memory/__data_end i32 (i32.const 3608)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 36376)) (global $~lib/memory/__heap_base i32 (i32.const 36376)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 140) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") @@ -320,7 +323,7 @@ if i32.const 448 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4215,76 +4218,6 @@ i32.add return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1056 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28i32%29=>i32> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%29=>i32>~visit - return - end - unreachable - ) (func $~start call $start:resolve-ternary ) @@ -4301,6 +4234,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -4543,30 +4508,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) (local $sign i32) (local $out i32) @@ -4825,4 +4766,102 @@ local.get $5 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1056 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28i32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%29=>i32> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28i32%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%29=>i32>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28i32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/resolve-ternary.release.wat b/tests/compiler/resolve-ternary.release.wat index d6ff759cbd..ed56d6d929 100644 --- a/tests/compiler/resolve-ternary.release.wat +++ b/tests/compiler/resolve-ternary.release.wat @@ -2,14 +2,14 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32) (result i32))) (type $2 (func)) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (param i64 i64 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -76,6 +76,41 @@ (elem $0 (i32.const 1) $start:resolve-ternary~anonymous|0 $start:resolve-ternary~anonymous|1 $resolve-ternary/g1 $resolve-ternary/g2) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4632 + i32.lt_s + if + i32.const 37424 + i32.const 37472 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -114,7 +149,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$128 + block $__inlined_func$~lib/rt/itcms/Object#unlink$129 local.get $1 i32.load offset=4 i32.const -4 @@ -138,7 +173,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$128 + br $__inlined_func$~lib/rt/itcms/Object#unlink$129 end local.get $1 i32.load offset=8 @@ -181,7 +216,7 @@ if i32.const 1472 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -893,7 +928,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$84 + block $__inlined_func$~lib/util/string/compareImpl$82 loop $while-continue|1 local.get $0 local.tee $3 @@ -913,7 +948,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$84 + br_if $__inlined_func$~lib/util/string/compareImpl$82 local.get $2 i32.const 2 i32.add diff --git a/tests/compiler/resolve-unary.debug.wat b/tests/compiler/resolve-unary.debug.wat index 46d35d9426..f5e771fed4 100644 --- a/tests/compiler/resolve-unary.debug.wat +++ b/tests/compiler/resolve-unary.debug.wat @@ -12,7 +12,8 @@ (type $10 (func (param i64 i32) (result i32))) (type $11 (func (param i32 i64 i32 i32))) (type $12 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -24,6 +25,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -36,6 +38,7 @@ (global $~lib/memory/__data_end i32 (i32.const 2848)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 35616)) (global $~lib/memory/__heap_base i32 (i32.const 35616)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "|\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 140) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") @@ -312,7 +315,7 @@ if i32.const 448 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2879,96 +2882,6 @@ ) (func $resolve-unary/generic<~lib/string/String> (param $v i32) ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $resolve-unary/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $resolve-unary/bar - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1056 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28%29=>void> - block $resolve-unary/Bar - block $resolve-unary/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-unary/Foo $resolve-unary/Bar $~lib/function/Function<%28%29=>void> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - unreachable - ) (func $~start call $start:resolve-unary ) @@ -2985,6 +2898,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -3749,30 +3694,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) (local $sign i32) (local $out i32) @@ -3983,4 +3904,122 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $resolve-unary/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $resolve-unary/bar + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1056 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28%29=>void> + block $resolve-unary/Bar + block $resolve-unary/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $resolve-unary/Foo $resolve-unary/Bar $~lib/function/Function<%28%29=>void> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/resolve-unary.release.wat b/tests/compiler/resolve-unary.release.wat index a407109355..17599185b4 100644 --- a/tests/compiler/resolve-unary.release.wat +++ b/tests/compiler/resolve-unary.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) (type $1 (func (param i32 i32) (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -84,6 +84,41 @@ (data $32 (i32.const 3840) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3872 + i32.lt_s + if + i32.const 36672 + i32.const 36720 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -197,7 +232,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$79 + block $__inlined_func$~lib/util/string/compareImpl$77 loop $while-continue|1 local.get $0 local.tee $3 @@ -217,7 +252,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$79 + br_if $__inlined_func$~lib/util/string/compareImpl$77 local.get $2 i32.const 2 i32.add @@ -284,7 +319,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$156 + block $__inlined_func$~lib/rt/itcms/Object#unlink$157 local.get $1 i32.load offset=4 i32.const -4 @@ -308,7 +343,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$156 + br $__inlined_func$~lib/rt/itcms/Object#unlink$157 end local.get $1 i32.load offset=8 @@ -351,7 +386,7 @@ if i32.const 1472 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/retain-i32.debug.wat b/tests/compiler/retain-i32.debug.wat index 29864f2efa..e67768d16c 100644 --- a/tests/compiler/retain-i32.debug.wat +++ b/tests/compiler/retain-i32.debug.wat @@ -2,8 +2,9 @@ (type $0 (func)) (type $1 (func (param i32 i32 i32 i32))) (type $2 (func (param i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/builtins/i8.MAX_VALUE i32 (i32.const 127)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/builtins/i8.MIN_VALUE i32 (i32.const -128)) (global $~lib/builtins/u8.MAX_VALUE i32 (i32.const 255)) (global $~lib/builtins/i16.MIN_VALUE i32 (i32.const -32768)) @@ -750,4 +751,49 @@ (func $~start call $start:retain-i32 ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/return-unreachable.debug.wat b/tests/compiler/return-unreachable.debug.wat index 0c46f0c920..53eb818cf8 100644 --- a/tests/compiler/return-unreachable.debug.wat +++ b/tests/compiler/return-unreachable.debug.wat @@ -8,10 +8,12 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -228,7 +230,7 @@ if i32.const 320 i32.const 384 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2358,73 +2360,6 @@ i32.store unreachable ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 320 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 128 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start memory.size i32.const 16 @@ -2457,6 +2392,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) (local $2 i32) (local $3 i32) @@ -2524,7 +2491,7 @@ if i32.const 32 i32.const 80 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -2595,6 +2562,73 @@ global.set $~lib/memory/__stack_pointer local.get $6 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 320 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 128 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2605,6 +2639,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this diff --git a/tests/compiler/return-unreachable.release.wat b/tests/compiler/return-unreachable.release.wat index 85d8930589..4a3ef2c4f6 100644 --- a/tests/compiler/return-unreachable.release.wat +++ b/tests/compiler/return-unreachable.release.wat @@ -2,12 +2,12 @@ (type $0 (func (param i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) (type $7 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -38,6 +38,41 @@ (export "test" (func $return-unreachable/test)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1560 + i32.lt_s + if + i32.const 34352 + i32.const 34400 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -477,7 +512,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$121 + block $__inlined_func$~lib/rt/itcms/Object#unlink$122 local.get $0 i32.load offset=4 i32.const -4 @@ -501,7 +536,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$121 + br $__inlined_func$~lib/rt/itcms/Object#unlink$122 end local.get $0 i32.load offset=8 @@ -544,7 +579,7 @@ if i32.const 1344 i32.const 1408 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/return.debug.wat b/tests/compiler/return.debug.wat index 3a0fe739ab..f65db09b22 100644 --- a/tests/compiler/return.debug.wat +++ b/tests/compiler/return.debug.wat @@ -1,13 +1,14 @@ (module (type $0 (func)) (type $1 (func (param i32 i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 44)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32812)) (global $~lib/memory/__heap_base i32 (i32.const 32812)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") (table $0 2 2 funcref) @@ -63,6 +64,23 @@ unreachable end ) + (func $export:return/testVoidReturnFunction (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $0 + local.get $1 + call $return/testVoidReturnFunction + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $start:return (local $0 i32) global.get $~lib/memory/__stack_pointer @@ -86,20 +104,35 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $export:return/testVoidReturnFunction (param $0 i32) (param $1 i32) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $1 + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 i32.store - local.get $0 - local.get $1 - call $return/testVoidReturnFunction + local.get $4 + local.get $fileName + local.set $4 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer ) diff --git a/tests/compiler/return.release.wat b/tests/compiler/return.release.wat index 6bc1ea50aa..4b2b359ba2 100644 --- a/tests/compiler/return.release.wat +++ b/tests/compiler/return.release.wat @@ -3,7 +3,7 @@ (type $1 (func (param i32 i32 i32 i32))) (type $2 (func (param i32))) (type $3 (func (param i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33836)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -14,22 +14,43 @@ (export "memory" (memory $0)) (export "testVoidReturnFunction" (func $export:return/testVoidReturnFunction)) (start $~start) - (func $~start - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer + (func $~stack_check global.get $~lib/memory/__stack_pointer i32.const 1068 i32.lt_s if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33856 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33904 + i32.store offset=4 i32.const 33856 i32.const 33904 i32.const 1 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer unreachable end + ) + (func $~start + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -53,17 +74,7 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1068 - i32.lt_s - if - i32.const 33856 - i32.const 33904 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer local.get $1 i32.store diff --git a/tests/compiler/rt/alloc-large-memory.debug.wat b/tests/compiler/rt/alloc-large-memory.debug.wat index 9d12c607e6..e79a1e2cbb 100644 --- a/tests/compiler/rt/alloc-large-memory.debug.wat +++ b/tests/compiler/rt/alloc-large-memory.debug.wat @@ -2,13 +2,14 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) (type $2 (func)) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i64) (result i32))) (type $6 (func (param i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 140)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32908)) (global $~lib/memory/__heap_base i32 (i32.const 32908)) @@ -1536,4 +1537,49 @@ (func $~start call $start:rt/alloc-large-memory ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32928 + i32.const 32976 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/rt/alloc-large-memory.release.wat b/tests/compiler/rt/alloc-large-memory.release.wat index 05d01619c0..12695b81e0 100644 --- a/tests/compiler/rt/alloc-large-memory.release.wat +++ b/tests/compiler/rt/alloc-large-memory.release.wat @@ -1,12 +1,13 @@ (module - (type $0 (func (param i32 i32))) - (type $1 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32))) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32 i32 i64))) (type $4 (func (param i32))) (type $5 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33932)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") @@ -14,6 +15,41 @@ (data $1.1 (i32.const 1112) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1164 + i32.lt_s + if + i32.const 33952 + i32.const 34000 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) diff --git a/tests/compiler/rt/finalize.debug.wat b/tests/compiler/rt/finalize.debug.wat index 9e9ef46519..da7604446c 100644 --- a/tests/compiler/rt/finalize.debug.wat +++ b/tests/compiler/rt/finalize.debug.wat @@ -4,13 +4,14 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $rt/finalize/expect (mut i32) (i32.const 0)) (global $rt/finalize/ran (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,6 +23,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -228,7 +230,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2347,55 +2349,6 @@ unreachable end ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $rt/finalize/Ref - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rt/finalize/Ref $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start global.get $~started if @@ -2418,6 +2371,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $rt/finalize/Ref#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2484,4 +2469,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rt/finalize/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rt/finalize/Ref $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/rt/finalize.release.wat b/tests/compiler/rt/finalize.release.wat index 8dbd26236c..2568f13b53 100644 --- a/tests/compiler/rt/finalize.release.wat +++ b/tests/compiler/rt/finalize.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32) (result i32))) (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $rt/finalize/expect (mut i32) (i32.const 0)) (global $rt/finalize/ran (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -37,6 +37,41 @@ (data $9 (i32.const 1488) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1512 + i32.lt_s + if + i32.const 34304 + i32.const 34352 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/step (result i32) (local $0 i32) (local $1 i32) @@ -350,7 +385,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$112 + block $__inlined_func$~lib/rt/itcms/Object#unlink$113 local.get $1 i32.load offset=4 i32.const -4 @@ -374,7 +409,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$112 + br $__inlined_func$~lib/rt/itcms/Object#unlink$113 end local.get $1 i32.load offset=8 @@ -417,7 +452,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/rt/flags.debug.wat b/tests/compiler/rt/flags.debug.wat index 7a20ca9635..4221de636e 100644 --- a/tests/compiler/rt/flags.debug.wat +++ b/tests/compiler/rt/flags.debug.wat @@ -1,12 +1,14 @@ (module (type $0 (func (param i32))) - (type $1 (func (param i32) (result i32))) - (type $2 (func)) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $rt/flags/VALUE_ALIGN_REF i32 (i32.const 256)) (global $rt/flags/KEY_ALIGN_REF i32 (i32.const 131072)) (global $~lib/rt/__rtti_base i32 (i32.const 176)) @@ -37,7 +39,7 @@ if i32.const 32 i32.const 96 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1101,4 +1103,49 @@ (func $~start call $start:rt/flags ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33184 + i32.const 33232 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/rt/flags.release.wat b/tests/compiler/rt/flags.release.wat index 5935c9e5e9..4973c7a6e4 100644 --- a/tests/compiler/rt/flags.release.wat +++ b/tests/compiler/rt/flags.release.wat @@ -1,8 +1,9 @@ (module - (type $0 (func)) - (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34184)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") @@ -21,7 +22,7 @@ if i32.const 1056 i32.const 1120 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -33,6 +34,41 @@ i32.add i32.load ) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1416 + i32.lt_s + if + i32.const 34208 + i32.const 34256 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start call $start:rt/flags ) diff --git a/tests/compiler/rt/ids.debug.wat b/tests/compiler/rt/ids.debug.wat index b663e8fa45..369759e11b 100644 --- a/tests/compiler/rt/ids.debug.wat +++ b/tests/compiler/rt/ids.debug.wat @@ -3,6 +3,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/memory/__data_end i32 (i32.const 8)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) (global $~lib/memory/__heap_base i32 (i32.const 32776)) diff --git a/tests/compiler/rt/issue-2719.debug.wat b/tests/compiler/rt/issue-2719.debug.wat index 6aae0a765d..9337a6a343 100644 --- a/tests/compiler/rt/issue-2719.debug.wat +++ b/tests/compiler/rt/issue-2719.debug.wat @@ -8,7 +8,8 @@ (type $6 (func (param i32 i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -225,7 +227,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2300,55 +2302,6 @@ local.get $this i32.load ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $rt/issue-2719/issue2719_T - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rt/issue-2719/issue2719_T $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:rt/issue-2719 ) @@ -2365,6 +2318,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $rt/issue-2719/issue2719_T#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2555,4 +2540,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $rt/issue-2719/issue2719_T + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $rt/issue-2719/issue2719_T $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/rt/issue-2719.release.wat b/tests/compiler/rt/issue-2719.release.wat index 82735386cb..367ca11975 100644 --- a/tests/compiler/rt/issue-2719.release.wat +++ b/tests/compiler/rt/issue-2719.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $9 (i32.const 1504) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1528 + i32.lt_s + if + i32.const 34320 + i32.const 34368 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/step (result i32) (local $0 i32) (local $1 i32) @@ -332,7 +367,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$119 + block $__inlined_func$~lib/rt/itcms/Object#unlink$120 local.get $1 i32.load offset=4 i32.const -4 @@ -356,7 +391,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$119 + br $__inlined_func$~lib/rt/itcms/Object#unlink$120 end local.get $1 i32.load offset=8 @@ -399,7 +434,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/rt/runtime-incremental-export.debug.wat b/tests/compiler/rt/runtime-incremental-export.debug.wat index e95efa75fe..e65750efae 100644 --- a/tests/compiler/rt/runtime-incremental-export.debug.wat +++ b/tests/compiler/rt/runtime-incremental-export.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -231,7 +233,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2365,6 +2367,70 @@ i32.const 0 drop ) + (func $~start + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33360 + i32.const 33408 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 224 @@ -2417,23 +2483,4 @@ end unreachable ) - (func $~start - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base - i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 144 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 176 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 320 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - ) ) diff --git a/tests/compiler/rt/runtime-incremental-export.release.wat b/tests/compiler/rt/runtime-incremental-export.release.wat index 422cd0bc5a..ac2b09a045 100644 --- a/tests/compiler/rt/runtime-incremental-export.release.wat +++ b/tests/compiler/rt/runtime-incremental-export.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func (param i32))) (type $1 (func)) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i32) (result i32))) (type $5 (func (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -19,6 +19,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1568)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34356)) (memory $0 1) (data $0 (i32.const 1036) "<") (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") @@ -42,6 +43,41 @@ (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1588 + i32.lt_s + if + i32.const 34384 + i32.const 34432 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -144,7 +180,7 @@ i32.and i32.eq if - i32.const 34356 + global.get $~lib/memory/__stack_pointer local.set $0 loop $while-continue|0 local.get $0 @@ -1207,7 +1243,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/rt/runtime-minimal-export.debug.wat b/tests/compiler/rt/runtime-minimal-export.debug.wat index 95a809eadd..9b99a40648 100644 --- a/tests/compiler/rt/runtime-minimal-export.debug.wat +++ b/tests/compiler/rt/runtime-minimal-export.debug.wat @@ -4,10 +4,11 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/rt/tcms/fromSpace (mut i32) (i32.const 0)) @@ -36,6 +37,15 @@ (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + i32.const 0 + drop + local.get $message + local.get $fileName + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + ) (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) local.get $this local.get $flMap @@ -1988,6 +1998,17 @@ i32.const 0 drop ) + (func $~start + i32.const 208 + call $~lib/rt/tcms/initLazy + global.set $~lib/rt/tcms/fromSpace + i32.const 304 + call $~lib/rt/tcms/initLazy + global.set $~lib/rt/tcms/pinSpace + i32.const 400 + call $~lib/rt/tcms/initLazy + global.set $~lib/rt/tcms/toSpace + ) (func $~lib/rt/tcms/__visit (param $ptr i32) (param $cookie i32) (local $obj i32) local.get $ptr @@ -2064,15 +2085,4 @@ end unreachable ) - (func $~start - i32.const 208 - call $~lib/rt/tcms/initLazy - global.set $~lib/rt/tcms/fromSpace - i32.const 304 - call $~lib/rt/tcms/initLazy - global.set $~lib/rt/tcms/pinSpace - i32.const 400 - call $~lib/rt/tcms/initLazy - global.set $~lib/rt/tcms/toSpace - ) ) diff --git a/tests/compiler/rt/runtime-minimal-export.release.wat b/tests/compiler/rt/runtime-minimal-export.release.wat index dbea43d114..789f763220 100644 --- a/tests/compiler/rt/runtime-minimal-export.release.wat +++ b/tests/compiler/rt/runtime-minimal-export.release.wat @@ -6,7 +6,7 @@ (type $4 (func (param i32 i32 i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/rt/tcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tcms/white (mut i32) (i32.const 0)) @@ -95,7 +95,7 @@ i32.const 1184 i32.const 268 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $3 @@ -109,7 +109,7 @@ i32.const 1184 i32.const 270 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $3 @@ -155,7 +155,7 @@ i32.const 1184 i32.const 284 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -238,7 +238,7 @@ i32.const 1184 i32.const 201 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -252,7 +252,7 @@ i32.const 1184 i32.const 203 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -313,7 +313,7 @@ i32.const 1184 i32.const 221 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -346,7 +346,7 @@ i32.const 1184 i32.const 233 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $4 @@ -361,7 +361,7 @@ i32.const 1184 i32.const 234 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $4 @@ -412,7 +412,7 @@ i32.const 1184 i32.const 251 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -493,7 +493,7 @@ i32.const 1120 i32.const 101 i32.const 18 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end return @@ -507,7 +507,7 @@ i32.const 1120 i32.const 105 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -579,7 +579,7 @@ i32.const 1184 i32.const 334 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -631,7 +631,7 @@ i32.const 1184 i32.const 347 i32.const 18 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -743,7 +743,7 @@ i32.const 1184 i32.const 382 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -768,7 +768,7 @@ i32.const 1184 i32.const 389 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $3 @@ -795,7 +795,7 @@ i32.const 1184 i32.const 402 i32.const 5 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end end @@ -917,7 +917,7 @@ i32.const 1120 i32.const 195 i32.const 5 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -966,7 +966,7 @@ i32.const 1120 i32.const 181 i32.const 7 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $1 @@ -1011,7 +1011,7 @@ i32.const 1120 i32.const 125 i32.const 30 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end global.get $~lib/rt/tlsf/ROOT @@ -1032,7 +1032,7 @@ i32.const 1184 i32.const 461 i32.const 29 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $4 @@ -1135,7 +1135,7 @@ i32.const 1184 i32.const 499 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end end @@ -1150,7 +1150,7 @@ i32.const 1184 i32.const 501 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $4 @@ -1169,7 +1169,7 @@ i32.const 1184 i32.const 361 i32.const 14 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $6 @@ -1302,7 +1302,7 @@ i32.const 1120 i32.const 213 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -1342,7 +1342,7 @@ i32.const 1120 i32.const 223 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -1379,7 +1379,7 @@ i32.const 1120 i32.const 232 i32.const 16 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -1442,7 +1442,7 @@ i32.const 1184 i32.const 562 i32.const 3 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $4 diff --git a/tests/compiler/rt/runtime-stub-export.debug.wat b/tests/compiler/rt/runtime-stub-export.debug.wat index da03f96897..368ef414ca 100644 --- a/tests/compiler/rt/runtime-stub-export.debug.wat +++ b/tests/compiler/rt/runtime-stub-export.debug.wat @@ -1,11 +1,12 @@ (module (type $0 (func (param i32 i32))) - (type $1 (func (param i32))) - (type $2 (func (param i32) (result i32))) - (type $3 (func)) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32) (result i32))) + (type $4 (func)) (type $5 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 144)) @@ -23,6 +24,15 @@ (export "__rtti_base" (global $~lib/rt/__rtti_base)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + i32.const 0 + drop + local.get $message + local.get $fileName + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + ) (func $~lib/rt/stub/maybeGrowMemory (param $newOffset i32) (local $pagesBefore i32) (local $maxOffset i32) diff --git a/tests/compiler/rt/runtime-stub-export.release.wat b/tests/compiler/rt/runtime-stub-export.release.wat index 639ae34c0b..5719139110 100644 --- a/tests/compiler/rt/runtime-stub-export.release.wat +++ b/tests/compiler/rt/runtime-stub-export.release.wat @@ -4,7 +4,7 @@ (type $2 (func (param i32))) (type $3 (func (param i32) (result i32))) (type $4 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) (global $~lib/rt/__rtti_base i32 (i32.const 1168)) (memory $0 1) @@ -43,7 +43,7 @@ i32.const 1120 i32.const 86 i32.const 30 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end local.get $0 @@ -57,7 +57,7 @@ i32.const 1120 i32.const 33 i32.const 29 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end global.get $~lib/rt/stub/offset diff --git a/tests/compiler/simd.debug.wat b/tests/compiler/simd.debug.wat index ded9a32b78..fd6c6ffb85 100644 --- a/tests/compiler/simd.debug.wat +++ b/tests/compiler/simd.debug.wat @@ -23,10 +23,12 @@ (type $21 (func (param f64 f64) (result v128))) (type $22 (func (param i32 i32) (result v128))) (type $23 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -38,6 +40,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $simd/vec (mut v128) (v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000)) (global $~lib/builtins/u8.MAX_VALUE i32 (i32.const 255)) (global $~lib/builtins/u16.MAX_VALUE i32 (i32.const 65535)) @@ -264,7 +267,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -6798,88 +6801,6 @@ f64x2.replace_lane 1 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:simd ) @@ -6896,6 +6817,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result v128) (local $value v128) (local $3 i32) @@ -6920,7 +6873,7 @@ if i32.const 272 i32.const 480 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -7033,8 +6986,11 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -7043,23 +6999,133 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop - local.get $this - local.set $2 + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $7 + return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -7069,6 +7135,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -7077,7 +7147,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -7085,11 +7155,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -7098,44 +7165,24 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer + local.get $2 i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $7 - return ) ) diff --git a/tests/compiler/simd.release.wat b/tests/compiler/simd.release.wat index 4194c78220..443a7dd5e0 100644 --- a/tests/compiler/simd.release.wat +++ b/tests/compiler/simd.release.wat @@ -2,9 +2,9 @@ (type $0 (func (param i32))) (type $1 (func)) (type $2 (func (param i32 i32 i32) (result v128))) - (type $3 (func (param i32 i32) (result i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (param i32) (result i32))) (type $8 (func (result i32))) @@ -18,7 +18,7 @@ (type $16 (func (param f32 f32 f32) (result v128))) (type $17 (func (param f32 f32 f32 f32) (result v128))) (type $18 (func (param v128) (result v128))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -65,6 +65,41 @@ (export "vec" (global $simd/vec)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1612 + i32.lt_s + if + i32.const 34400 + i32.const 34448 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/tlsf/initialize (local $0 i32) (local $1 i32) @@ -840,7 +875,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$132 + block $__inlined_func$~lib/rt/itcms/Object#unlink$133 local.get $0 i32.load offset=4 i32.const -4 @@ -864,7 +899,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$132 + br $__inlined_func$~lib/rt/itcms/Object#unlink$133 end local.get $0 i32.load offset=8 @@ -907,7 +942,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1563,7 +1598,7 @@ if i32.const 1296 i32.const 1504 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/simd.ts b/tests/compiler/simd.ts index 82dd705064..1ede33e60b 100644 --- a/tests/compiler/simd.ts +++ b/tests/compiler/simd.ts @@ -1,4 +1,4 @@ -// hint: asc tests/compiler/simd --enable simd +// hint: toilscript tests/compiler/simd --enable simd { // test static array literal let arr = [i32x4(1, 2, 3, 4)]; diff --git a/tests/compiler/static-this.debug.wat b/tests/compiler/static-this.debug.wat index 4b335cf70f..0fdcd1a223 100644 --- a/tests/compiler/static-this.debug.wat +++ b/tests/compiler/static-this.debug.wat @@ -1,9 +1,10 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $static-this/Foo.bar (mut i32) (i32.const 42)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -34,4 +35,49 @@ (func $~start call $start:static-this ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/array-access.debug.wat b/tests/compiler/std/array-access.debug.wat index 951850584d..da51225e9e 100644 --- a/tests/compiler/std/array-access.debug.wat +++ b/tests/compiler/std/array-access.debug.wat @@ -5,10 +5,12 @@ (type $3 (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func)) (type $5 (func (param i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 284)) @@ -198,6 +200,152 @@ unreachable end ) + (func $export:std/array-access/i32ArrayArrayElementAccess (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/i32ArrayArrayElementAccess + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:std/array-access/stringArrayPropertyAccess (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/stringArrayPropertyAccess + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:std/array-access/stringArrayMethodCall (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/stringArrayMethodCall + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:std/array-access/stringArrayArrayPropertyAccess (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/stringArrayArrayPropertyAccess + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:std/array-access/stringArrayArrayMethodCall (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/stringArrayArrayMethodCall + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $export:std/array-access/functionArrayElementCall (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $std/array-access/functionArrayElementCall + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array<~lib/array/Array>#__get (param $this i32) (param $index i32) (result i32) (local $value i32) (local $3 i32) @@ -221,7 +369,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -251,7 +399,7 @@ if i32.const 144 i32.const 96 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -288,7 +436,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -373,7 +521,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -403,7 +551,7 @@ if i32.const 144 i32.const 96 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -595,7 +743,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -625,7 +773,7 @@ if i32.const 144 i32.const 96 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -748,7 +896,7 @@ if i32.const 32 i32.const 96 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -778,7 +926,7 @@ if i32.const 144 i32.const 96 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -823,118 +971,4 @@ local.get $1 return ) - (func $export:std/array-access/i32ArrayArrayElementAccess (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/i32ArrayArrayElementAccess - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:std/array-access/stringArrayPropertyAccess (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/stringArrayPropertyAccess - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:std/array-access/stringArrayMethodCall (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/stringArrayMethodCall - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:std/array-access/stringArrayArrayPropertyAccess (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/stringArrayArrayPropertyAccess - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:std/array-access/stringArrayArrayMethodCall (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/stringArrayArrayMethodCall - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $export:std/array-access/functionArrayElementCall (param $0 i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - local.get $0 - call $std/array-access/functionArrayElementCall - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/std/array-access.release.wat b/tests/compiler/std/array-access.release.wat index b24b426a6e..ae595c68d6 100644 --- a/tests/compiler/std/array-access.release.wat +++ b/tests/compiler/std/array-access.release.wat @@ -2,7 +2,7 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32 i32 i32))) (type $2 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34076)) (memory $0 1) (data $0 (i32.const 1036) "<") @@ -21,6 +21,41 @@ (export "stringArrayArrayPropertyAccess" (func $export:std/array-access/stringArrayArrayPropertyAccess)) (export "stringArrayArrayMethodCall" (func $export:std/array-access/stringArrayArrayMethodCall)) (export "functionArrayElementCall" (func $export:std/array-access/functionArrayElementCall)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1308 + i32.lt_s + if + i32.const 34096 + i32.const 34144 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array<~lib/array/Array>#__get (param $0 i32) (param $1 i32) (result i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -50,7 +85,7 @@ if i32.const 1056 i32.const 1120 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -73,7 +108,7 @@ if i32.const 1168 i32.const 1120 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -179,7 +214,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$10 + block $__inlined_func$~lib/util/string/compareImpl$21 loop $while-continue|1 local.get $0 local.tee $2 @@ -199,7 +234,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$10 + br_if $__inlined_func$~lib/util/string/compareImpl$21 local.get $1 i32.const 2 i32.add @@ -516,7 +551,7 @@ if i32.const 1056 i32.const 1120 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/array-literal.debug.wat b/tests/compiler/std/array-literal.debug.wat index 641be48a4f..314c1d5b8d 100644 --- a/tests/compiler/std/array-literal.debug.wat +++ b/tests/compiler/std/array-literal.debug.wat @@ -10,11 +10,13 @@ (type $8 (func (result i32))) (type $9 (func (param i32 i32 i32) (result i32))) (type $10 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/array-literal/staticArrayI8 i32 (i32.const 64)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $std/array-literal/staticArrayI32 i32 (i32.const 320)) (global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 400)) (global $std/array-literal/i (mut i32) (i32.const 0)) @@ -260,7 +262,7 @@ if i32.const 176 i32.const 640 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2506,182 +2508,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/array-literal/staticArrayI8 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/staticArrayI32 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/emptyArrayI32 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/dynamicArrayI8 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/dynamicArrayI32 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/dynamicArrayRef - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array-literal/dynamicArrayRefWithCtor - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 176 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 784 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $std/array-literal/RefWithCtor - block $~lib/array/Array - block $std/array-literal/Ref - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $std/array-literal/Ref $~lib/array/Array $std/array-literal/RefWithCtor $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:std/array-literal ) @@ -2723,6 +2549,38 @@ local.get $1 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) (local $value i32) (local $3 i32) @@ -2746,7 +2604,7 @@ if i32.const 176 i32.const 240 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2823,7 +2681,7 @@ if i32.const 176 i32.const 240 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2957,6 +2815,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -2997,7 +2859,7 @@ if i32.const 176 i32.const 240 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3066,7 +2928,7 @@ if i32.const 176 i32.const 240 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3173,7 +3035,7 @@ if i32.const 176 i32.const 240 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3211,6 +3073,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3271,7 +3137,7 @@ if i32.const 176 i32.const 240 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3309,6 +3175,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3883,8 +3753,11 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3893,32 +3766,326 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop - local.get $this - local.set $2 + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $std/array-literal/RefWithCtor#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/array-literal/staticArrayI8 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/staticArrayI32 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/emptyArrayI32 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/dynamicArrayI8 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/dynamicArrayI32 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/dynamicArrayRef + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array-literal/dynamicArrayRefWithCtor + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 176 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 784 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $std/array-literal/RefWithCtor + block $~lib/array/Array + block $std/array-literal/Ref + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $std/array-literal/Ref $~lib/array/Array $std/array-literal/RefWithCtor $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3948,6 +4115,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -4018,6 +4189,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -4075,113 +4250,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $std/array-literal/RefWithCtor#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 8 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) ) diff --git a/tests/compiler/std/array-literal.release.wat b/tests/compiler/std/array-literal.release.wat index 0f52e76640..89ac521369 100644 --- a/tests/compiler/std/array-literal.release.wat +++ b/tests/compiler/std/array-literal.release.wat @@ -4,12 +4,12 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func)) (type $4 (func (result i32))) - (type $5 (func (param i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32))) (type $7 (func (param i32) (result i32))) (type $8 (func (param i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 1424)) (global $std/array-literal/i (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -59,6 +59,41 @@ (data $17 (i32.const 1840) "\n\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00B\08\00\00\02\t\00\00 \00\00\00\02A\00\00 \00\00\00\02A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1884 + i32.lt_s + if + i32.const 34672 + i32.const 34720 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -117,7 +152,7 @@ if i32.const 1200 i32.const 1264 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -528,7 +563,7 @@ if i32.const 1200 i32.const 1264 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -575,7 +610,7 @@ if i32.const 1200 i32.const 1264 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1449,7 +1484,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$154 + block $__inlined_func$~lib/rt/itcms/Object#unlink$155 local.get $0 i32.load offset=4 i32.const -4 @@ -1473,7 +1508,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$154 + br $__inlined_func$~lib/rt/itcms/Object#unlink$155 end local.get $0 i32.load offset=8 @@ -1516,7 +1551,7 @@ if i32.const 1200 i32.const 1664 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1657,7 +1692,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$149 + block $__inlined_func$~lib/rt/itcms/__renew$143 i32.const 1073741820 local.get $3 i32.const 1 @@ -1700,7 +1735,7 @@ i32.store offset=16 local.get $1 local.set $2 - br $__inlined_func$~lib/rt/itcms/__renew$149 + br $__inlined_func$~lib/rt/itcms/__renew$143 end local.get $3 local.get $4 @@ -1776,7 +1811,7 @@ if i32.const 1200 i32.const 1264 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -1843,7 +1878,7 @@ if i32.const 1200 i32.const 1264 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/array.debug.wat b/tests/compiler/std/array.debug.wat index b54061ee14..6fecc70ec8 100644 --- a/tests/compiler/std/array.debug.wat +++ b/tests/compiler/std/array.debug.wat @@ -11,10 +11,10 @@ (type $9 (func (param i32 i32 i32 i32 i32 i32))) (type $10 (func (param i32))) (type $11 (func)) - (type $12 (func (param i64 i32) (result i32))) - (type $13 (func (result f64))) - (type $14 (func (param i32 f64 i32) (result i32))) - (type $15 (func (param i32 i32 i32 i32))) + (type $12 (func (param i32 i32 i32 i32))) + (type $13 (func (param i64 i32) (result i32))) + (type $14 (func (result f64))) + (type $15 (func (param i32 f64 i32) (result i32))) (type $16 (func (param i64) (result i64))) (type $17 (func (param i32 i64 i32))) (type $18 (func (param i32 i32 i32) (result f32))) @@ -33,12 +33,14 @@ (type $31 (func (param i32 i32) (result f32))) (type $32 (func (param i32 i32) (result f64))) (type $33 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "Math.random" (func $~lib/bindings/dom/Math.random (result f64))) (import "env" "seed" (func $~lib/builtins/seed (result f64))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -569,7 +571,7 @@ if i32.const 320 i32.const 384 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -8621,1279 +8623,771 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/array/arr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array/charset - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/array/inputStabArr - local.tee $1 + (func $~start + global.get $~started if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + return end - global.get $std/array/outputStabArr - local.tee $1 + i32.const 1 + global.set $~started + call $start:std/array + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 47968 + i32.const 48016 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable end - i32.const 320 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1616 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 5392 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 128 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 7120 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 8176 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#get:_env (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#get:_env (param $this i32) (result i32) + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + (func $std/array/Ref#constructor (param $this i32) (param $v i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit - ) - (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $v + call $std/array/Ref#set:v local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) + (local $buffer i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $length + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 576 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + local.get $alignLog2 + i32.shl + local.tee $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $~lib/arraybuffer/ArrayBufferView#set:buffer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#__visit - ) - (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + call $~lib/arraybuffer/ArrayBufferView#set:dataStart local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit - ) - (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $length + call $~lib/arraybuffer/ArrayBufferView#set:byteLength local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 ) - (func $~lib/array/Array>#get:buffer (param $this i32) (result i32) + (func $~lib/typedarray/Uint8Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load - ) - (func $~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array>#__visit - ) - (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit - ) - (func $~lib/array/Array<~lib/string/String|null>#get:buffer (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String|null>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String|null>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#get:_env (param $this i32) (result i32) + (func $~lib/array/Array#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + drop local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit - ) - (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#get:_env (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.get $value + local.get $start + local.get $end + call $~lib/util/bytes/FILL local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit + return ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + i32.const 320 + i32.const 80 + i32.const 116 + i32.const 42 + call $~lib/builtins/abort + unreachable + end local.get $this - i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value + i32.const 0 + drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) + (local $i i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $len + i32.eqz + if + local.get $a + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length + local.set $len + local.get $len + local.get $b + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length + i32.ne + if + i32.const 0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + local.get $a + local.get $b + i32.eq + if + i32.const 1 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + end + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $len + i32.lt_s + if + i32.const 0 + drop + local.get $a + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array#__get + local.get $b + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $i + call $~lib/array/Array#__get + i32.ne + if + i32.const 0 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + i32.const 1 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return ) - (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + (func $~lib/array/Array#fill@varargs (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $2of2 + block $1of2 + block $0of2 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of2 $1of2 $2of2 $outOfRange + end + unreachable + end + i32.const 0 + local.set $start + end + global.get $~lib/builtins/i32.MAX_VALUE + local.set $end + end local.get $this - i32.load + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $value + local.get $start + local.get $end + call $~lib/array/Array#fill + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 ) - (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit - ) - (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + (func $~lib/array/Array#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + drop local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#__visit - ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:buffer (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:dataStart local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit - ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:buffer (param $this i32) (result i32) + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/array/Array#get:length_ + local.get $value + local.get $start + local.get $end + call $~lib/util/bytes/FILL local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return ) - (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#get:_env (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store local.get $1 - call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array> - block $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> - block $~lib/array/Array<~lib/array/Array<~lib/array/Array>> - block $~lib/array/Array<~lib/array/Array> - block $~lib/array/Array<~lib/array/Array> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> - block $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> - block $~lib/array/Array<~lib/string/String|null> - block $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> - block $~lib/array/Array> - block $std/array/Proxy - block $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> - block $~lib/array/Array<~lib/array/Array> - block $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32> - block $~lib/function/Function<%28u32%2Cu32%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%29=>i32> - block $~lib/function/Function<%28f64%2Cf64%29=>i32> - block $~lib/function/Function<%28f32%2Cf32%29=>i32> - block $~lib/array/Array - block $std/array/Dim - block $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> - block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String> - block $~lib/array/Array<~lib/string/String> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/typedarray/Uint8Array - block $std/array/Ref - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $std/array/Ref $~lib/typedarray/Uint8Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> $~lib/array/Array<~lib/string/String> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> $std/array/Dim $~lib/array/Array $~lib/function/Function<%28f32%2Cf32%29=>i32> $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28u32%2Cu32%29=>i32> $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32> $~lib/array/Array<~lib/array/Array> $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> $std/array/Proxy $~lib/array/Array> $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> $~lib/array/Array<~lib/string/String|null> $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array<~lib/array/Array>> $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/array/Array>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String|null>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>~visit - return - end - unreachable - ) - (func $~start - global.get $~started - if - return - end - i32.const 1 - global.set $~started - call $start:std/array - ) - (func $~stack_check + call $~lib/array/Array#get:length_ + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 47968 - i32.const 48016 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return ) - (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) (local $3 i32) - (local $bufferSize i32) - (local $buffer i32) - (local $6 i32) global.get $~lib/memory/__stack_pointer - i32.const 16 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - i32.const 0 - call $~lib/array/Array#set:buffer - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - i32.const 0 - call $~lib/array/Array#set:dataStart - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 i32.const 0 - call $~lib/array/Array#set:byteLength + i32.store + local.get $index local.get $this - local.set $6 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - i32.const 0 - call $~lib/array/Array#set:length_ - local.get $length - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u if - i32.const 32 + i32.const 320 i32.const 80 - i32.const 70 - i32.const 60 + i32.const 116 + i32.const 42 call $~lib/builtins/abort unreachable end - local.get $length - local.tee $2 - i32.const 8 - local.tee $3 - local.get $2 + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer local.get $3 - i32.gt_u - select + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index i32.const 2 i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store offset=8 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne + i32.add + i32.load + local.set $value + i32.const 0 drop - local.get $this - local.set $6 + local.get $value + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - local.get $buffer - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=12 - local.get $6 - call $~lib/array/Array#set:buffer - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - local.get $buffer - call $~lib/array/Array#set:dataStart - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - local.get $bufferSize - call $~lib/array/Array#set:byteLength - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=4 - local.get $6 - local.get $length - call $~lib/array/Array#set:length_ - local.get $this - local.set $6 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $6 - ) - (func $std/array/Ref#constructor (param $this i32) (param $v i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.const 5 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $v - call $std/array/Ref#set:v - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) - (local $buffer i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $length - i32.const 1073741820 - local.get $alignLog2 - i32.shr_u - i32.gt_u - if - i32.const 32 - i32.const 576 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - local.get $alignLog2 - i32.shl - local.tee $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store offset=8 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=12 - local.get $4 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $length - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $~lib/typedarray/Uint8Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/array/Array#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - call $~lib/array/Array#get:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - call $~lib/array/Array#get:length_ - local.get $value - local.get $start - local.get $end - call $~lib/util/bytes/FILL - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - return - ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) - (local $value i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array#get:length_ - i32.ge_u - if - i32.const 320 - i32.const 80 - i32.const 114 - i32.const 42 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array#get:dataStart - local.get $index - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.set $value - i32.const 0 - drop - local.get $value - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) - (local $i i32) - (local $4 i32) + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) + (local $i i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -9911,7 +9405,7 @@ local.get $4 i32.store local.get $4 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length local.set $len local.get $len local.get $b @@ -9920,7 +9414,7 @@ local.get $4 i32.store local.get $4 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.ne if i32.const 0 @@ -9962,7 +9456,7 @@ i32.store local.get $4 local.get $i - call $~lib/array/Array#__get + call $~lib/array/Array#__get local.get $b local.set $4 global.get $~lib/memory/__stack_pointer @@ -9970,7 +9464,7 @@ i32.store local.get $4 local.get $i - call $~lib/array/Array#__get + call $~lib/array/Array#__get i32.ne if i32.const 0 @@ -9998,7 +9492,7 @@ local.get $4 return ) - (func $~lib/array/Array#fill@varargs (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (func $~lib/array/Array#fill@varargs (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) (local $4 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -10034,7 +9528,7 @@ local.get $value local.get $start local.get $end - call $~lib/array/Array#fill + call $~lib/array/Array#fill local.set $4 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -10042,7 +9536,7 @@ global.set $~lib/memory/__stack_pointer local.get $4 ) - (func $~lib/array/Array#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (func $~lib/array/Array#fill (param $this i32) (param $value f32) (param $start i32) (param $end i32) (result i32) (local $4 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -10060,18 +9554,18 @@ local.get $4 i32.store local.get $4 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $this local.set $4 global.get $~lib/memory/__stack_pointer local.get $4 i32.store local.get $4 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ local.get $value local.get $start local.get $end - call $~lib/util/bytes/FILL + call $~lib/util/bytes/FILL local.get $this local.set $4 global.get $~lib/memory/__stack_pointer @@ -10081,7 +9575,7 @@ local.get $4 return ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -10097,7 +9591,7 @@ local.get $1 i32.store local.get $1 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -10106,9 +9600,10 @@ local.get $1 return ) - (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) - (local $value i32) + (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result f32) + (local $value f32) (local $3 i32) + (local $4 f32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -10124,12 +9619,12 @@ local.get $3 i32.store local.get $3 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ i32.ge_u if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10140,27 +9635,31 @@ local.get $3 i32.store local.get $3 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index i32.const 2 i32.shl i32.add - i32.load + f32.load local.set $value i32.const 0 drop local.get $value - local.set $3 + local.set $4 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $4 return ) - (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) + (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) (local $i i32) - (local $4 i32) + (local $4 f32) + (local $5 f32) + (local $x f64) + (local $x|7 f64) + (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -10173,30 +9672,30 @@ i32.eqz if local.get $a - local.set $4 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $8 i32.store - local.get $4 - call $~lib/array/Array#get:length + local.get $8 + call $~lib/array/Array#get:length local.set $len local.get $len local.get $b - local.set $4 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $8 i32.store - local.get $4 - call $~lib/array/Array#get:length + local.get $8 + call $~lib/array/Array#get:length i32.ne if i32.const 0 - local.set $4 + local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 + local.get $8 return end local.get $a @@ -10204,12 +9703,12 @@ i32.eq if i32.const 1 - local.set $4 + local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 + local.get $8 return end end @@ -10220,306 +9719,34 @@ local.get $len i32.lt_s if - i32.const 0 - drop - local.get $a - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - local.get $i - call $~lib/array/Array#__get - local.get $b - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - local.get $i - call $~lib/array/Array#__get - i32.ne - if - i32.const 0 - local.set $4 + block $for-continue|0 + i32.const 1 + drop + local.get $a + local.set $8 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $i + call $~lib/array/Array#__get + local.tee $4 local.get $4 - return - end - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - i32.const 1 - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - return - ) - (func $~lib/array/Array#fill@varargs (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - block $2of2 - block $1of2 - block $0of2 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of2 $1of2 $2of2 $outOfRange - end - unreachable - end - i32.const 0 - local.set $start - end - global.get $~lib/builtins/i32.MAX_VALUE - local.set $end - end - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - local.get $value - local.get $start - local.get $end - call $~lib/array/Array#fill - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $~lib/array/Array#fill (param $this i32) (param $value f32) (param $start i32) (param $end i32) (result i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - call $~lib/array/Array#get:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - local.get $4 - call $~lib/array/Array#get:length_ - local.get $value - local.get $start - local.get $end - call $~lib/util/bytes/FILL - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - return - ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result f32) - (local $value f32) - (local $3 i32) - (local $4 f32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array#get:length_ - i32.ge_u - if - i32.const 320 - i32.const 80 - i32.const 114 - i32.const 42 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array#get:dataStart - local.get $index - i32.const 2 - i32.shl - i32.add - f32.load - local.set $value - i32.const 0 - drop - local.get $value - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - return - ) - (func $std/array/isArraysEqual (param $a i32) (param $b i32) (param $len i32) (result i32) - (local $i i32) - (local $4 f32) - (local $5 f32) - (local $x f64) - (local $x|7 f64) - (local $8 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $len - i32.eqz - if - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store - local.get $8 - call $~lib/array/Array#get:length - local.set $len - local.get $len - local.get $b - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store - local.get $8 - call $~lib/array/Array#get:length - i32.ne - if - i32.const 0 - local.set $8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $8 - return - end - local.get $a - local.get $b - i32.eq - if - i32.const 1 - local.set $8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $8 - return - end - end - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $len - i32.lt_s - if - block $for-continue|0 - i32.const 1 - drop - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store - local.get $8 - local.get $i - call $~lib/array/Array#__get - local.tee $4 - local.get $4 - f32.ne - if (result i32) - local.get $b - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store - local.get $8 - local.get $i - call $~lib/array/Array#__get - local.tee $5 - local.get $5 - f32.ne - else - i32.const 0 + f32.ne + if (result i32) + local.get $b + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $i + call $~lib/array/Array#__get + local.tee $5 + local.get $5 + f32.ne + else + i32.const 0 end if br $for-continue|0 @@ -10833,6 +10060,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -10931,7 +10162,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10986,7 +10217,7 @@ if i32.const 1616 i32.const 80 - i32.const 271 + i32.const 283 i32.const 18 call $~lib/builtins/abort unreachable @@ -11050,7 +10281,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -11088,6 +10319,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -11185,7 +10420,7 @@ if i32.const 320 i32.const 80 - i32.const 143 + i32.const 147 i32.const 33 call $~lib/builtins/abort unreachable @@ -11258,7 +10493,7 @@ if i32.const 32 i32.const 80 - i32.const 224 + i32.const 232 i32.const 60 call $~lib/builtins/abort unreachable @@ -11728,7 +10963,7 @@ if i32.const 1616 i32.const 80 - i32.const 330 + i32.const 344 i32.const 18 call $~lib/builtins/abort unreachable @@ -12111,7 +11346,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -13236,7 +12471,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -13266,7 +12501,7 @@ if i32.const 5392 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -13306,7 +12541,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -13344,6 +12579,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -13552,7 +12791,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -13612,7 +12851,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -14625,6 +13864,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $result i32.const 1 @@ -15664,7 +14907,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -15702,6 +14945,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -16902,7 +16149,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -18687,6 +17934,10 @@ i32.add local.get $ref i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $slice local.get $ref i32.const 1 @@ -20018,7 +19269,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -20048,7 +19299,7 @@ if i32.const 5392 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -20274,7 +19525,7 @@ if i32.const 32 i32.const 80 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -20371,7 +19622,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -20409,6 +19660,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -21768,7 +21023,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -21798,7 +21053,7 @@ if i32.const 5392 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -22027,7 +21282,7 @@ if i32.const 32 i32.const 80 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -22160,7 +21415,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -22198,6 +21453,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -23541,7 +22800,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -23571,7 +22830,7 @@ if i32.const 5392 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -24971,7 +24230,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -25659,7 +24918,7 @@ if i32.const 32 i32.const 80 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -25988,7 +25247,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -26026,6 +25285,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -27335,7 +26598,7 @@ if i32.const 320 i32.const 80 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -27365,7 +26628,7 @@ if i32.const 5392 i32.const 80 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -31191,7 +30454,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -31229,6 +30492,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -31792,7 +31059,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -31830,6 +31097,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -31865,7 +31136,7 @@ if i32.const 320 i32.const 80 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -31903,6 +31174,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -32593,249 +31868,261 @@ local.get $outArray local.get $outBuffer i32.store - local.get $outArray - local.get $outBuffer - i32.const 0 - call $~lib/rt/itcms/__link - i32.const 0 - local.set $resultOffset - i32.const 0 - local.set $i|10 - loop $for-loop|1 - local.get $i|10 - local.get $len - i32.lt_s - if - block $for-continue|1 - local.get $ptr - local.get $i|10 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $child|11 - local.get $child|11 - i32.eqz - if - br $for-continue|1 - end - local.get $child|11 - i32.load offset=12 - i32.const 2 - i32.shl - local.set $childDataLength - local.get $outBuffer - local.get $resultOffset - i32.add - local.get $child|11 - i32.load offset=4 - local.get $childDataLength - memory.copy - local.get $resultOffset - local.get $childDataLength - i32.add - local.set $resultOffset - end - local.get $i|10 - i32.const 1 - i32.add - local.set $i|10 - br $for-loop|1 - end - end - i32.const 0 - drop - local.get $outArray - local.set $13 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $13 - return - ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__set (param $this i32) (param $index i32) (param $value i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ - i32.ge_u - if - local.get $index - i32.const 0 - i32.lt_s - if - i32.const 320 - i32.const 80 - i32.const 130 - i32.const 22 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.get $index - i32.const 1 - i32.add - i32.const 2 - i32.const 1 - call $~lib/array/ensureCapacity - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - local.get $index - i32.const 1 - i32.add - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#set:length_ - end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart - local.get $index i32.const 2 - i32.shl - i32.add - local.get $value - i32.store - i32.const 1 - drop - local.get $this - local.get $value - i32.const 1 - call $~lib/rt/itcms/__link - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat (param $this i32) (result i32) - (local $ptr i32) - (local $len i32) - (local $size i32) - (local $i i32) - (local $child i32) - (local $byteLength i32) - (local $outBuffer i32) - (local $outArray i32) - (local $resultOffset i32) - (local $i|10 i32) - (local $child|11 i32) - (local $childDataLength i32) - (local $i|13 i32) - (local $ref i32) - (local $15 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - i32.const 1 - i32.eqz + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $outArray + local.get $outBuffer + i32.const 0 + call $~lib/rt/itcms/__link + i32.const 0 + local.set $resultOffset + i32.const 0 + local.set $i|10 + loop $for-loop|1 + local.get $i|10 + local.get $len + i32.lt_s + if + block $for-continue|1 + local.get $ptr + local.get $i|10 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $child|11 + local.get $child|11 + i32.eqz + if + br $for-continue|1 + end + local.get $child|11 + i32.load offset=12 + i32.const 2 + i32.shl + local.set $childDataLength + local.get $outBuffer + local.get $resultOffset + i32.add + local.get $child|11 + i32.load offset=4 + local.get $childDataLength + memory.copy + local.get $resultOffset + local.get $childDataLength + i32.add + local.set $resultOffset + end + local.get $i|10 + i32.const 1 + i32.add + local.set $i|10 + br $for-loop|1 + end + end + i32.const 0 + drop + local.get $outArray + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 320 + i32.const 80 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 1 + drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $value + i32.const 1 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#flat (param $this i32) (result i32) + (local $ptr i32) + (local $len i32) + (local $size i32) + (local $i i32) + (local $child i32) + (local $byteLength i32) + (local $outBuffer i32) + (local $outArray i32) + (local $resultOffset i32) + (local $i|10 i32) + (local $child|11 i32) + (local $childDataLength i32) + (local $i|13 i32) + (local $ref i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + i32.const 1 + i32.eqz + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart + local.set $ptr + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ + local.set $len + i32.const 0 + local.set $size + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $len + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $child + local.get $size + local.get $child + i32.const 0 + i32.eq + if (result i32) + i32.const 0 + else + local.get $child + i32.load offset=12 + end + i32.add + local.set $size + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $size + i32.const 2 + i32.shl + local.set $byteLength + global.get $~lib/memory/__stack_pointer + local.get $byteLength + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $outBuffer + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 34 + call $~lib/rt/itcms/__new + local.tee $outArray + i32.store offset=8 + local.get $outArray + local.get $size + i32.store offset=12 + local.get $outArray + local.get $byteLength + i32.store offset=8 + local.get $outArray + local.get $outBuffer + i32.store offset=4 + local.get $outArray + local.get $outBuffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop - local.get $this - local.set $15 - global.get $~lib/memory/__stack_pointer - local.get $15 - i32.store - local.get $15 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart - local.set $ptr - local.get $this - local.set $15 - global.get $~lib/memory/__stack_pointer - local.get $15 - i32.store - local.get $15 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ - local.set $len - i32.const 0 - local.set $size - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $len - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $child - local.get $size - local.get $child - i32.const 0 - i32.eq - if (result i32) - i32.const 0 - else - local.get $child - i32.load offset=12 - end - i32.add - local.set $size - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - local.get $size - i32.const 2 - i32.shl - local.set $byteLength - global.get $~lib/memory/__stack_pointer - local.get $byteLength - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $outBuffer - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.const 34 - call $~lib/rt/itcms/__new - local.tee $outArray - i32.store offset=8 - local.get $outArray - local.get $size - i32.store offset=12 - local.get $outArray - local.get $byteLength - i32.store offset=8 - local.get $outArray - local.get $outBuffer - i32.store offset=4 - local.get $outArray - local.get $outBuffer - i32.store local.get $outArray local.get $outBuffer i32.const 0 @@ -32902,6 +32189,10 @@ i32.add i32.load local.set $ref + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $outBuffer local.get $ref i32.const 1 @@ -33094,6 +32385,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $result i32.const 1 @@ -44069,8 +43364,11 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -44079,24 +43377,64 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop - local.get $this - local.set $2 + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $7 + return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) + (local $sign i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|8 i32) + (local $buffer|9 i32) + (local $num|10 i32) + (local $offset|11 i32) + (local $val32 i32) + (local $decimals|13 i32) + (local $14 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -44105,24 +43443,168 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end + if + i32.const 6496 + i32.const 6624 + i32.const 373 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $value + i32.eqz + if + i32.const 6688 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $value + i32.const 31 + i32.shr_u + i32.const 1 + i32.shl + local.set $sign + local.get $sign + if + i32.const 0 + local.get $value + i32.sub + local.set $value + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer + local.get $value + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 31 + local.get $value + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|8 + global.get $~lib/memory/__stack_pointer + local.get $decimals|8 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|9 + local.get $value + local.set $num|10 + local.get $decimals|8 + local.set $offset|11 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|9 + local.get $num|10 + i64.extend_i32_u + local.get $offset|11 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.set $val32 + local.get $val32 + i64.extend_i32_u + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|13 + global.get $~lib/memory/__stack_pointer + local.get $decimals|13 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.get $val32 + i64.extend_i32_u + local.get $decimals|13 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $sign + if + local.get $out + i32.const 45 + i32.store16 + end + local.get $out + local.set $14 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $14 + return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -44131,293 +43613,812 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - drop local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp f32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $comparator + local.tee $5 i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + f32.load + local.get $ptr + local.get $j i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array#get:length_ + i32.add + local.tee $j i32.const 2 i32.shl i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $7) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $7) + i32.const 31 + i32.shr_u + else + i32.const 0 + end if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + f32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + f32.load + f32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + f32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $7) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 end end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $10 + return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp f64) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $comparator + local.tee $5 i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $ptr + local.get $j + i32.const 3 + i32.shl i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + f64.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $8) i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $8) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + f64.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + f64.load + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + local.get $tmp + f64.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $8) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $10 + return ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store - i32.const 1 - drop - local.get $this - local.set $5 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $comparator + local.tee $5 i32.store - local.get $5 - call $~lib/array/Array#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array#get:length_ + local.get $ptr + local.get $j i32.const 2 i32.shl i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val + i32.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + i32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 end end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $10 + return ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store - local.get $this - local.set $2 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $comparator + local.tee $5 i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + i32.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + i32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $10 + return ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) + (func $~lib/util/number/utoa32 (param $value i32) (param $radix i32) (result i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|7 i32) + (local $buffer|8 i32) + (local $num|9 i32) + (local $offset|10 i32) + (local $decimals|11 i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -44426,64 +44427,1428 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:length_ + local.get $radix i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end + if + i32.const 6496 + i32.const 6624 + i32.const 350 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $value + i32.eqz + if + i32.const 6688 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer + local.get $value + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $radix + i32.const 16 + i32.eq if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 + i32.const 31 + local.get $value + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|7 + global.get $~lib/memory/__stack_pointer + local.get $decimals|7 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|8 + local.get $value + local.set $num|9 + local.get $decimals|7 + local.set $offset|10 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|8 + local.get $num|9 + i64.extend_i32_u + local.get $offset|10 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + i64.extend_i32_u + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|11 + global.get $~lib/memory/__stack_pointer + local.get $decimals|11 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $value + i64.extend_i32_u + local.get $decimals|11 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $out + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/util/number/dtoa (param $value f64) (result i32) + (local $value|1 f64) + (local $isSingle i32) + (local $size i32) + (local $result i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $~lib/util/number/dtoa_impl|inlined.0 (result i32) + local.get $value + local.set $value|1 + i32.const 0 + local.set $isSingle + local.get $value|1 + f64.const 0 + f64.eq + if + i32.const 11296 + br $~lib/util/number/dtoa_impl|inlined.0 + end + local.get $value|1 + local.get $value|1 + f64.sub + f64.const 0 + f64.eq + i32.eqz + if + local.get $value|1 + local.get $value|1 + f64.ne + if + i32.const 11328 + br $~lib/util/number/dtoa_impl|inlined.0 + end + i32.const 11360 + i32.const 11408 + local.get $value|1 + f64.const 0 + f64.lt + select + br $~lib/util/number/dtoa_impl|inlined.0 + end + i32.const 11440 + local.get $value|1 + local.get $isSingle + call $~lib/util/number/dtoa_core + i32.const 1 + i32.shl + local.set $size + global.get $~lib/memory/__stack_pointer + local.get $size + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result + i32.store + local.get $result + i32.const 11440 + local.get $size + memory.copy + local.get $result + br $~lib/util/number/dtoa_impl|inlined.0 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/util/number/utoa64 (param $value i64) (param $radix i32) (result i32) + (local $out i32) + (local $val32 i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|8 i32) + (local $buffer|9 i32) + (local $num|10 i64) + (local $offset|11 i32) + (local $decimals|12 i32) + (local $buffer|13 i32) + (local $num|14 i64) + (local $offset|15 i32) + (local $decimals|16 i32) + (local $17 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end + if + i32.const 6496 + i32.const 6624 + i32.const 401 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $value + i64.const 0 + i64.ne + i32.eqz + if + i32.const 6688 + local.set $17 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + global.get $~lib/builtins/u32.MAX_VALUE + i64.extend_i32_u + i64.le_u + if + local.get $value + i32.wrap_i64 + local.set $val32 + local.get $val32 + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer + local.get $val32 + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $value + call $~lib/util/number/decimalCount64High + local.set $decimals|8 + global.get $~lib/memory/__stack_pointer + local.get $decimals|8 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|9 + local.get $value + local.set $num|10 + local.get $decimals|8 + local.set $offset|11 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|9 + local.get $num|10 + local.get $offset|11 + call $~lib/util/number/utoa64_dec_lut + end + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 63 + local.get $value + i64.clz + i32.wrap_i64 + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|12 + global.get $~lib/memory/__stack_pointer + local.get $decimals|12 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|13 + local.get $value + local.set $num|14 + local.get $decimals|12 + local.set $offset|15 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|13 + local.get $num|14 + local.get $offset|15 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|16 + global.get $~lib/memory/__stack_pointer + local.get $decimals|16 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $value + local.get $decimals|16 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $out + local.set $17 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return + ) + (func $~lib/util/number/itoa64 (param $value i64) (param $radix i32) (result i32) + (local $sign i32) + (local $out i32) + (local $val32 i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|9 i32) + (local $buffer|10 i32) + (local $num|11 i64) + (local $offset|12 i32) + (local $decimals|13 i32) + (local $buffer|14 i32) + (local $num|15 i64) + (local $offset|16 i32) + (local $decimals|17 i32) + (local $18 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end + if + i32.const 6496 + i32.const 6624 + i32.const 431 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $value + i64.const 0 + i64.ne + i32.eqz + if + i32.const 6688 + local.set $18 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $18 + return + end + local.get $value + i64.const 63 + i64.shr_u + i32.wrap_i64 + i32.const 1 + i32.shl + local.set $sign + local.get $sign + if + i64.const 0 + local.get $value + i64.sub + local.set $value + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + global.get $~lib/builtins/u32.MAX_VALUE + i64.extend_i32_u + i64.le_u + if + local.get $value + i32.wrap_i64 + local.set $val32 + local.get $val32 + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer + local.get $val32 + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $value + call $~lib/util/number/decimalCount64High + local.set $decimals|9 + global.get $~lib/memory/__stack_pointer + local.get $decimals|9 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|10 + local.get $value + local.set $num|11 + local.get $decimals|9 + local.set $offset|12 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|10 + local.get $num|11 + local.get $offset|12 + call $~lib/util/number/utoa64_dec_lut + end + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 63 + local.get $value + i64.clz + i32.wrap_i64 + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|13 + global.get $~lib/memory/__stack_pointer + local.get $decimals|13 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|14 + local.get $value + local.set $num|15 + local.get $decimals|13 + local.set $offset|16 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|14 + local.get $num|15 + local.get $offset|16 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|17 + global.get $~lib/memory/__stack_pointer + local.get $decimals|17 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.get $value + local.get $decimals|17 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $sign + if + local.get $out + i32.const 45 + i32.store16 + end + local.get $out + local.set $18 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $18 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/array/arr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array/charset + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array/inputStabArr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/array/outputStabArr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 320 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1616 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 5392 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 128 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 7120 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 8176 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit + ) + (func $~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array>#__visit + ) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit + ) + (func $~lib/array/Array<~lib/string/String|null>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String|null>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String|null>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit + ) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/array/Array<~lib/array/Array>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#__visit + ) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit + ) + (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array> + block $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> + block $~lib/array/Array<~lib/array/Array<~lib/array/Array>> + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array<~lib/array/Array> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> + block $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> + block $~lib/array/Array<~lib/string/String|null> + block $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> + block $~lib/array/Array> + block $std/array/Proxy + block $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> + block $~lib/array/Array<~lib/array/Array> + block $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32> + block $~lib/function/Function<%28u32%2Cu32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28f64%2Cf64%29=>i32> + block $~lib/function/Function<%28f32%2Cf32%29=>i32> + block $~lib/array/Array + block $std/array/Dim + block $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> + block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String> + block $~lib/array/Array<~lib/string/String> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/typedarray/Uint8Array + block $std/array/Ref + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $std/array/Ref $~lib/typedarray/Uint8Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void> $~lib/array/Array<~lib/string/String> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32> $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32> $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool> $std/array/Dim $~lib/array/Array $~lib/function/Function<%28f32%2Cf32%29=>i32> $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28u32%2Cu32%29=>i32> $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32> $~lib/array/Array<~lib/array/Array> $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32> $std/array/Proxy $~lib/array/Array> $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32> $~lib/array/Array<~lib/string/String|null> $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32> $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array> $~lib/array/Array<~lib/array/Array<~lib/array/Array>> $~lib/array/Array<~lib/array/Array<~lib/string/String|null>> $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/array/Array>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String|null>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>~visit + return end + local.get $0 + local.get $1 + call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>~visit + return end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + unreachable ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44493,37 +45858,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.store + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44531,7 +45878,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44541,13 +45888,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44555,7 +45908,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44565,13 +45918,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44579,7 +45938,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44589,13 +45948,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44603,7 +45968,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -44616,6 +45981,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -44624,7 +45993,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.set $cur local.get $cur local.get $this @@ -44633,7 +46002,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ i32.const 2 i32.shl i32.add @@ -44665,31 +46034,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44697,7 +46042,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44707,37 +46052,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.store + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44745,7 +46072,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44755,37 +46082,19 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.store + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#get:_env + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44793,7 +46102,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -44806,6 +46115,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -44814,7 +46127,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:dataStart + call $~lib/array/Array#get:dataStart local.set $cur local.get $cur local.get $this @@ -44823,7 +46136,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:length_ + call $~lib/array/Array#get:length_ i32.const 2 i32.shl i32.add @@ -44855,7 +46168,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:buffer + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44863,7 +46176,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44873,83 +46186,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array>#get:length_ - i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array>#get:buffer + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44957,7 +46204,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44967,13 +46214,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#get:_env + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>void>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -44981,7 +46232,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/string/String|null>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -44994,6 +46245,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -45002,7 +46257,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/string/String|null>#get:dataStart + call $~lib/array/Array<~lib/string/String>#get:dataStart local.set $cur local.get $cur local.get $this @@ -45011,7 +46266,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/string/String|null>#get:length_ + call $~lib/array/Array<~lib/string/String>#get:length_ i32.const 2 i32.shl i32.add @@ -45043,55 +46298,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/string/String|null>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#get:_env + call $~lib/array/Array<~lib/string/String>#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45099,7 +46306,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45109,7 +46316,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -45117,7 +46326,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>~lib/string/String>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45125,7 +46334,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45135,7 +46344,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -45143,7 +46354,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>f32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45151,7 +46362,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45161,7 +46372,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -45169,7 +46382,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28i32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45177,7 +46390,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45187,7 +46400,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -45195,7 +46410,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/array/Array%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45203,7 +46418,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45213,7 +46428,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -45221,7 +46438,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28bool%2Ci32%2Ci32%2C~lib/array/Array%29=>bool>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45229,7 +46446,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -45242,6 +46459,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -45250,7 +46471,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:dataStart + call $~lib/array/Array#get:dataStart local.set $cur local.get $cur local.get $this @@ -45259,7 +46480,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:length_ + call $~lib/array/Array#get:length_ i32.const 2 i32.shl i32.add @@ -45291,7 +46512,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:buffer + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45299,11 +46520,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -45312,56 +46530,129 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 1 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 i32.store - local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:dataStart - local.set $cur - local.get $cur + local.get $2 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 i32.store - local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:length_ i32.const 2 - i32.shl + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - local.set $5 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 i32.store - local.get $5 - call $~lib/array/Array<~lib/array/Array>#get:buffer + local.get $2 + call $~lib/function/Function<%28std/array/Dim%2Cstd/array/Dim%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45369,7 +46660,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -45382,6 +46673,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -45390,7 +46685,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:dataStart + call $~lib/array/Array<~lib/array/Array>#get:dataStart local.set $cur local.get $cur local.get $this @@ -45399,7 +46694,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:length_ + call $~lib/array/Array<~lib/array/Array>#get:length_ i32.const 2 i32.shl i32.add @@ -45431,7 +46726,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:buffer + call $~lib/array/Array<~lib/array/Array>#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45439,7 +46734,35 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/array/Array%2C~lib/array/Array%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array>#__visit (param $this i32) (param $cookie i32) (local $cur i32) (local $end i32) (local $val i32) @@ -45452,6 +46775,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -45460,7 +46787,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart + call $~lib/array/Array>#get:dataStart local.set $cur local.get $cur local.get $this @@ -45469,7 +46796,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ + call $~lib/array/Array>#get:length_ i32.const 2 i32.shl i32.add @@ -45501,7 +46828,7 @@ local.get $5 i32.store local.get $5 - call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:buffer + call $~lib/array/Array>#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45509,7 +46836,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45519,13 +46846,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#get:_env + call $~lib/function/Function<%28std/array/Proxy%2Cstd/array/Proxy%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -45533,73 +46864,11 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize - global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer - i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $7 - return - ) - (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) - (local $sign i32) - (local $out i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|8 i32) - (local $buffer|9 i32) - (local $num|10 i32) - (local $offset|11 i32) - (local $val32 i32) - (local $decimals|13 i32) - (local $14 i32) + (func $~lib/array/Array<~lib/string/String|null>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -45608,982 +46877,278 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6496 - i32.const 6624 - i32.const 373 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i32.eqz - if - i32.const 6688 - local.set $14 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $14 - return - end - local.get $value - i32.const 31 - i32.shr_u + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 - i32.shl - local.set $sign - local.get $sign - if - i32.const 0 - local.get $value - i32.sub - local.set $value - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer - local.get $value - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $radix - i32.const 16 - i32.eq - if - i32.const 31 - local.get $value - i32.clz - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|8 - global.get $~lib/memory/__stack_pointer - local.get $decimals|8 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|9 - local.get $value - local.set $num|10 - local.get $decimals|8 - local.set $offset|11 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|9 - local.get $num|10 - i64.extend_i32_u - local.get $offset|11 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.set $val32 - local.get $val32 - i64.extend_i32_u - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|13 - global.get $~lib/memory/__stack_pointer - local.get $decimals|13 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.get $val32 - i64.extend_i32_u - local.get $decimals|13 - local.get $radix - call $~lib/util/number/utoa64_any_core - end - end - local.get $sign - if - local.get $out - i32.const 45 - i32.store16 - end - local.get $out - local.set $14 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $14 - return - ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + drop + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $5 i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String|null>#get:dataStart + local.set $cur + local.get $cur local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp f32) - (local $9 i32) - (local $10 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $5 i32.store - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 2 - i32.shl - i32.add - f32.load - i32.const 2 - global.set $~argumentsLength local.get $5 - i32.load - call_indirect (type $7) - i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $7) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - f32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - f32.load - f32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - f32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $7) - i32.const 0 - i32.ge_s - else - i32.const 0 - end + call $~lib/array/Array<~lib/string/String|null>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 end end - local.get $j - local.set $10 + local.get $this + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String|null>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp f64) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 3 - i32.shl + local.get $2 + call $~lib/function/Function<%28~lib/string/String|null%2C~lib/string/String|null%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $8) + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $8) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - f64.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - f64.load - f64.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - local.get $tmp - f64.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $8) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/string/String%2C~lib/string/String%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j i32.const 2 - i32.shl - i32.add - i32.load - local.get $ptr - local.get $j - i32.const 1 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - i32.shl + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - i32.load - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - i32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 2 - i32.shl - i32.add - i32.load i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - i32.load - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - i32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/number/utoa32 (param $value i32) (param $radix i32) (result i32) - (local $out i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|7 i32) - (local $buffer|8 i32) - (local $num|9 i32) - (local $offset|10 i32) - (local $decimals|11 i32) - (local $12 i32) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -46592,138 +47157,71 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6496 - i32.const 6624 - i32.const 350 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i32.eqz - if - i32.const 6688 - local.set $12 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $12 - return - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer - local.get $value - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $radix - i32.const 16 - i32.eq + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u if - i32.const 31 - local.get $value - i32.clz - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 i32.add - local.set $decimals|7 - global.get $~lib/memory/__stack_pointer - local.get $decimals|7 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|8 - local.get $value - local.set $num|9 - local.get $decimals|7 - local.set $offset|10 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|8 - local.get $num|9 - i64.extend_i32_u - local.get $offset|10 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - i64.extend_i32_u - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|11 - global.get $~lib/memory/__stack_pointer - local.get $decimals|11 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $value - i64.extend_i32_u - local.get $decimals|11 - local.get $radix - call $~lib/util/number/utoa64_any_core + local.set $cur + br $while-continue|0 end end - local.get $out - local.set $12 + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $12 - return ) - (func $~lib/util/number/dtoa (param $value f64) (result i32) - (local $value|1 f64) - (local $isSingle i32) - (local $size i32) - (local $result i32) + (func $~lib/array/Array<~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -46733,85 +47231,72 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $~lib/util/number/dtoa_impl|inlined.0 (result i32) - local.get $value - local.set $value|1 - i32.const 0 - local.set $isSingle - local.get $value|1 - f64.const 0 - f64.eq - if - i32.const 11296 - br $~lib/util/number/dtoa_impl|inlined.0 - end - local.get $value|1 - local.get $value|1 - f64.sub - f64.const 0 - f64.eq - i32.eqz + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u if - local.get $value|1 - local.get $value|1 - f64.ne + local.get $cur + i32.load + local.set $val + local.get $val if - i32.const 11328 - br $~lib/util/number/dtoa_impl|inlined.0 + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit end - i32.const 11360 - i32.const 11408 - local.get $value|1 - f64.const 0 - f64.lt - select - br $~lib/util/number/dtoa_impl|inlined.0 + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 end - i32.const 11440 - local.get $value|1 - local.get $isSingle - call $~lib/util/number/dtoa_core - i32.const 1 - i32.shl - local.set $size - global.get $~lib/memory/__stack_pointer - local.get $size - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result - i32.store - local.get $result - i32.const 11440 - local.get $size - memory.copy - local.get $result - br $~lib/util/number/dtoa_impl|inlined.0 end + local.get $this local.set $5 global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 - return ) - (func $~lib/util/number/utoa64 (param $value i64) (param $radix i32) (result i32) - (local $out i32) - (local $val32 i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|8 i32) - (local $buffer|9 i32) - (local $num|10 i64) - (local $offset|11 i32) - (local $decimals|12 i32) - (local $buffer|13 i32) - (local $num|14 i64) - (local $offset|15 i32) - (local $decimals|16 i32) - (local $17 i32) + (func $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -46820,186 +47305,72 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6496 - i32.const 6624 - i32.const 401 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i64.const 0 - i64.ne - i32.eqz - if - i32.const 6688 - local.set $17 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $17 - return - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - global.get $~lib/builtins/u32.MAX_VALUE - i64.extend_i32_u - i64.le_u - if - local.get $value - i32.wrap_i64 - local.set $val32 - local.get $val32 - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer - local.get $val32 - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $value - call $~lib/util/number/decimalCount64High - local.set $decimals|8 - global.get $~lib/memory/__stack_pointer - local.get $decimals|8 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|9 - local.get $value - local.set $num|10 - local.get $decimals|8 - local.set $offset|11 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|9 - local.get $num|10 - local.get $offset|11 - call $~lib/util/number/utoa64_dec_lut - end - else - local.get $radix - i32.const 16 - i32.eq + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u if - i32.const 63 - local.get $value - i64.clz - i32.wrap_i64 - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 i32.add - local.set $decimals|12 - global.get $~lib/memory/__stack_pointer - local.get $decimals|12 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|13 - local.get $value - local.set $num|14 - local.get $decimals|12 - local.set $offset|15 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|13 - local.get $num|14 - local.get $offset|15 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|16 - global.get $~lib/memory/__stack_pointer - local.get $decimals|16 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $value - local.get $decimals|16 - local.get $radix - call $~lib/util/number/utoa64_any_core + local.set $cur + br $while-continue|0 end end - local.get $out - local.set $17 + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/array/Array>>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $17 - return ) - (func $~lib/util/number/itoa64 (param $value i64) (param $radix i32) (result i32) - (local $sign i32) - (local $out i32) - (local $val32 i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|9 i32) - (local $buffer|10 i32) - (local $num|11 i64) - (local $offset|12 i32) - (local $decimals|13 i32) - (local $buffer|14 i32) - (local $num|15 i64) - (local $offset|16 i32) - (local $decimals|17 i32) - (local $18 i32) + (func $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -47008,202 +47379,93 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6496 - i32.const 6624 - i32.const 431 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i64.const 0 - i64.ne - i32.eqz - if - i32.const 6688 - local.set $18 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $18 - return - end - local.get $value - i64.const 63 - i64.shr_u - i32.wrap_i64 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:length_ + i32.const 2 i32.shl - local.set $sign - local.get $sign - if - i64.const 0 - local.get $value - i64.sub - local.set $value - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - global.get $~lib/builtins/u32.MAX_VALUE - i64.extend_i32_u - i64.le_u - if - local.get $value - i32.wrap_i64 - local.set $val32 - local.get $val32 - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer - local.get $val32 - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $value - call $~lib/util/number/decimalCount64High - local.set $decimals|9 - global.get $~lib/memory/__stack_pointer - local.get $decimals|9 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|10 - local.get $value - local.set $num|11 - local.get $decimals|9 - local.set $offset|12 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|10 - local.get $num|11 - local.get $offset|12 - call $~lib/util/number/utoa64_dec_lut - end - else - local.get $radix - i32.const 16 - i32.eq + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u if - i32.const 63 - local.get $value - i64.clz - i32.wrap_i64 - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|13 - global.get $~lib/memory/__stack_pointer - local.get $decimals|13 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|14 - local.get $value - local.set $num|15 - local.get $decimals|13 - local.set $offset|16 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|14 - local.get $num|15 - local.get $offset|16 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|17 - global.get $~lib/memory/__stack_pointer - local.get $decimals|17 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 i32.add - local.get $value - local.get $decimals|17 - local.get $radix - call $~lib/util/number/utoa64_any_core + local.set $cur + br $while-continue|0 end end - local.get $sign - if - local.get $out - i32.const 45 - i32.store16 - end - local.get $out - local.set $18 + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/array/Array<~lib/string/String|null>>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28~lib/array/Array%2Ci32%2C~lib/array/Array<~lib/array/Array>%29=>~lib/array/Array>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $18 - return ) ) diff --git a/tests/compiler/std/array.release.wat b/tests/compiler/std/array.release.wat index d3525108c2..cca0267aad 100644 --- a/tests/compiler/std/array.release.wat +++ b/tests/compiler/std/array.release.wat @@ -7,8 +7,8 @@ (type $5 (func (param f64 f64) (result i32))) (type $6 (func (param f32 f32) (result i32))) (type $7 (func (param i32 i32))) - (type $8 (func (param i32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32))) (type $10 (func (param i32 i32 i32 i32 i32))) (type $11 (func)) (type $12 (func (result f64))) @@ -24,8 +24,8 @@ (type $22 (func (param i32 f32 i32 i32))) (type $23 (func (param i32 i32 i64))) (type $24 (func (param i32 i64 i64 i32 i64 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "seed" (func $~lib/builtins/seed (result f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "Math.random" (func $~lib/bindings/dom/Math.random (result f64))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -660,6 +660,41 @@ (elem $0 (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|20 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|34 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|34 $start:std/array~anonymous|40 $start:std/array~anonymous|34 $start:std/array~anonymous|34 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|34 $start:std/array~anonymous|40 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $std/array/assertStableSortedForComplexObjects~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|49 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|49 $start:std/array~anonymous|52 $std/array/assertStableSortedForComplexObjects~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String|null>~anonymous|0 $start:std/array~anonymous|54) (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 16192 + i32.lt_s + if + i32.const 48992 + i32.const 49040 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) @@ -786,7 +821,7 @@ if i32.const 1344 i32.const 1104 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -942,7 +977,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -994,7 +1029,7 @@ if i32.const 2640 i32.const 1104 - i32.const 271 + i32.const 283 i32.const 18 call $~lib/builtins/abort unreachable @@ -2518,7 +2553,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2571,7 +2606,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2594,7 +2629,7 @@ if i32.const 6416 i32.const 1104 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -3132,7 +3167,7 @@ if i32.const 1344 i32.const 1104 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3197,7 +3232,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3578,7 +3613,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3765,7 +3800,7 @@ select local.set $1 end - block $__inlined_func$~lib/rt/itcms/__renew$657 + block $__inlined_func$~lib/rt/itcms/__renew$648 local.get $3 i32.const 20 i32.sub @@ -3783,7 +3818,7 @@ i32.store offset=16 local.get $3 local.set $2 - br $__inlined_func$~lib/rt/itcms/__renew$657 + br $__inlined_func$~lib/rt/itcms/__renew$648 end local.get $1 local.get $4 @@ -3854,7 +3889,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -4290,7 +4325,7 @@ if i32.const 1056 i32.const 1104 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -4401,7 +4436,7 @@ local.get $2 call $~lib/array/Array#get:length local.set $3 - block $__inlined_func$std/array/isSorted$662 (result i32) + block $__inlined_func$std/array/isSorted$653 (result i32) loop $for-loop|0 local.get $0 local.get $3 @@ -4437,7 +4472,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$std/array/isSorted$662 + br $__inlined_func$std/array/isSorted$653 end local.get $0 i32.const 1 @@ -5034,7 +5069,7 @@ i32.lt_s select local.set $0 - block $__inlined_func$~lib/util/bytes/FILL$139 + block $__inlined_func$~lib/util/bytes/FILL$132 local.get $1 i32.eqz local.get $1 @@ -5059,7 +5094,7 @@ i32.shl memory.fill end - br $__inlined_func$~lib/util/bytes/FILL$139 + br $__inlined_func$~lib/util/bytes/FILL$132 end loop $for-loop|0 local.get $0 @@ -5397,7 +5432,7 @@ if i32.const 1056 i32.const 1104 - i32.const 224 + i32.const 232 i32.const 60 call $~lib/builtins/abort unreachable @@ -5484,7 +5519,7 @@ if i32.const 1344 i32.const 1104 - i32.const 143 + i32.const 147 i32.const 33 call $~lib/builtins/abort unreachable @@ -5613,7 +5648,7 @@ i32.lt_s select local.set $0 - block $__inlined_func$~lib/util/bytes/FILL$148 + block $__inlined_func$~lib/util/bytes/FILL$141 local.get $1 i32.reinterpret_f32 i32.eqz @@ -5635,7 +5670,7 @@ i32.shl memory.fill end - br $__inlined_func$~lib/util/bytes/FILL$148 + br $__inlined_func$~lib/util/bytes/FILL$141 end loop $for-loop|0 local.get $0 @@ -7124,7 +7159,7 @@ if i32.const 1344 i32.const 1408 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -7454,7 +7489,7 @@ global.get $~lib/memory/__stack_pointer i32.const 11856 i32.store - block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$5 (result i32) + block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$2 (result i32) global.get $~lib/memory/__stack_pointer i32.const 20 i32.sub @@ -7479,7 +7514,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$5 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$2 end local.get $5 i32.eqz @@ -7503,7 +7538,7 @@ i32.const 20 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$5 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$2 end i32.const 11568 local.set $0 @@ -8440,7 +8475,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -8912,7 +8947,7 @@ local.get $5 call $~lib/array/Array#get:length local.set $4 - block $__inlined_func$std/array/isSorted<~lib/array/Array>$664 (result i32) + block $__inlined_func$std/array/isSorted<~lib/array/Array>$655 (result i32) loop $for-loop|0 local.get $1 local.get $4 @@ -8958,7 +8993,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$std/array/isSorted<~lib/array/Array>$664 + br $__inlined_func$std/array/isSorted<~lib/array/Array>$655 end local.get $1 i32.const 1 @@ -12462,7 +12497,7 @@ if i32.const 1344 i32.const 1104 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -12515,7 +12550,7 @@ global.get $~lib/memory/__stack_pointer i32.const 11856 i32.store - block $__inlined_func$~lib/util/string/joinReferenceArray$4 (result i32) + block $__inlined_func$~lib/util/string/joinReferenceArray$1 (result i32) global.get $~lib/memory/__stack_pointer i32.const 20 i32.sub @@ -12540,7 +12575,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - br $__inlined_func$~lib/util/string/joinReferenceArray$4 + br $__inlined_func$~lib/util/string/joinReferenceArray$1 end local.get $2 i32.eqz @@ -12563,7 +12598,7 @@ i32.const 20 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinReferenceArray$4 + br $__inlined_func$~lib/util/string/joinReferenceArray$1 end i32.const 11568 local.set $0 @@ -13690,7 +13725,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $__inlined_func$~lib/util/number/utoa64$485 + block $__inlined_func$~lib/util/number/utoa64$478 local.get $3 i64.eqz if @@ -13700,7 +13735,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7712 local.set $1 - br $__inlined_func$~lib/util/number/utoa64$485 + br $__inlined_func$~lib/util/number/utoa64$478 end local.get $3 i64.const 4294967295 @@ -17902,9 +17937,9 @@ global.set $std/array/arr i32.const 0 call $std/array/Ref#constructor - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 8 @@ -17921,11 +17956,11 @@ i32.const 12 i32.const 6 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 16 @@ -17941,36 +17976,36 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=8 - local.get $0 + local.get $2 i32.eqz if global.get $~lib/memory/__stack_pointer i32.const 12 i32.const 3 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.const 0 i32.store - local.get $0 + local.get $2 i32.const 0 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.const 0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -17980,48 +18015,48 @@ local.tee $10 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer local.get $10 i32.store offset=12 - local.get $0 + local.get $2 local.get $10 i32.store - local.get $0 + local.get $2 local.get $10 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 local.get $10 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.const 1 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 16 i32.add global.set $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.eqz if i32.const 0 @@ -18037,18 +18072,18 @@ i32.const 7 i32.const 1696 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18059,7 +18094,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18072,16 +18107,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 0 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18092,7 +18127,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18105,15 +18140,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18124,7 +18159,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18137,16 +18172,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 2 i32.const -2 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18157,7 +18192,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18170,15 +18205,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18189,7 +18224,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18202,16 +18237,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const -1 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 0 @@ -18222,7 +18257,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18240,18 +18275,18 @@ i32.const 8 i32.const 1920 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=12 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18262,7 +18297,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18275,16 +18310,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 0 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18295,7 +18330,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18308,15 +18343,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18327,7 +18362,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18340,16 +18375,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 2 i32.const -2 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18360,7 +18395,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18373,15 +18408,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18392,7 +18427,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18405,16 +18440,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const -1 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18425,7 +18460,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18443,18 +18478,18 @@ i32.const 9 i32.const 2256 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=16 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 f32.const 1 i32.const 1 i32.const 3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18465,7 +18500,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18478,16 +18513,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 f32.const 0 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18498,7 +18533,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18511,15 +18546,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 f32.const 1 i32.const 0 i32.const -3 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18530,7 +18565,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18543,16 +18578,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 f32.const 2 i32.const -2 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18563,7 +18598,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18576,15 +18611,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 f32.const 0 i32.const 1 i32.const 0 call $~lib/array/Array#fill global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18595,7 +18630,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18608,16 +18643,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 f32.const -1 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18628,7 +18663,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18641,16 +18676,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 f32.const -0 i32.const 0 call $~lib/array/Array#fill@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -18661,7 +18696,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 call $std/array/isArraysEqual i32.eqz @@ -18675,9 +18710,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length if i32.const 0 @@ -18689,9 +18724,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18705,16 +18740,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 42 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 42 @@ -18729,9 +18764,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 1 i32.ne @@ -18745,9 +18780,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18761,9 +18796,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#pop i32.const 42 i32.ne @@ -18777,9 +18812,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length if i32.const 0 @@ -18791,9 +18826,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18807,16 +18842,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 43 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 1 i32.ne @@ -18830,9 +18865,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18846,9 +18881,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 43 @@ -18863,16 +18898,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 44 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -18886,9 +18921,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18902,9 +18937,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 43 @@ -18919,9 +18954,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 44 @@ -18936,16 +18971,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 45 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 3 i32.ne @@ -18959,9 +18994,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -18975,9 +19010,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 43 @@ -18992,9 +19027,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 44 @@ -19009,9 +19044,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#__get i32.const 45 @@ -19092,12 +19127,12 @@ i32.const 4 i32.const 2688 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=28 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#at i32.const 1 @@ -19111,9 +19146,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 3 call $~lib/array/Array#at i32.const 4 @@ -19127,9 +19162,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const -1 call $~lib/array/Array#at i32.const 4 @@ -19143,9 +19178,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const -4 call $~lib/array/Array#at i32.const 1 @@ -19161,18 +19196,18 @@ global.get $~lib/memory/__stack_pointer i32.const 0 call $~lib/array/Array#constructor - local.tee $0 + local.tee $2 i32.store offset=32 global.get $~lib/memory/__stack_pointer global.get $std/array/arr local.tee $9 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $9 - local.get $0 + local.get $2 call $~lib/array/Array#concat local.tee $9 i32.store offset=36 @@ -19304,15 +19339,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 46 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 47 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer @@ -19320,11 +19355,11 @@ local.tee $9 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $9 - local.get $0 + local.get $2 call $~lib/array/Array#concat local.tee $9 i32.store offset=36 @@ -19345,9 +19380,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -19481,12 +19516,12 @@ i32.const 4 i32.const 2768 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=40 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length if i32.const 0 @@ -19497,14 +19532,14 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer global.get $std/array/arr local.tee $9 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 local.get $9 call $~lib/array/Array#concat local.tee $9 @@ -19525,9 +19560,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length if i32.const 0 @@ -19543,20 +19578,20 @@ i32.const 4 i32.const 2800 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 0 i32.const 3 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19567,7 +19602,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19586,20 +19621,20 @@ i32.const 4 i32.const 2896 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 1 i32.const 3 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19610,7 +19645,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19629,20 +19664,20 @@ i32.const 4 i32.const 2992 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 1 i32.const 2 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19653,7 +19688,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19672,20 +19707,20 @@ i32.const 4 i32.const 3088 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 2 i32.const 2 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19696,7 +19731,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19715,19 +19750,19 @@ i32.const 4 i32.const 3184 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const 0 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19738,7 +19773,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19757,19 +19792,19 @@ i32.const 4 i32.const 3280 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const 1 i32.const 3 i32.const 4 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19780,7 +19815,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19799,19 +19834,19 @@ i32.const 4 i32.const 3376 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const 1 i32.const 2 i32.const 4 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19822,7 +19857,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19841,20 +19876,20 @@ i32.const 4 i32.const 3472 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 0 i32.const -2 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19865,7 +19900,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19884,19 +19919,19 @@ i32.const 4 i32.const 3568 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const 0 i32.const -2 i32.const -1 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19907,7 +19942,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19926,19 +19961,19 @@ i32.const 4 i32.const 3664 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const -4 i32.const -3 i32.const -2 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19949,7 +19984,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -19968,19 +20003,19 @@ i32.const 4 i32.const 3760 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 - local.get $0 + local.get $2 i32.const -4 i32.const -3 i32.const -1 call $~lib/array/Array#copyWithin - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -19991,7 +20026,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -20010,20 +20045,20 @@ i32.const 4 i32.const 3856 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=48 i32.const 2 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const -4 i32.const -3 call $~lib/array/Array#copyWithin@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 5 i32.const 2 @@ -20034,7 +20069,7 @@ global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=8 - local.get $0 + local.get $2 local.get $9 i32.const 0 call $std/array/isArraysEqual @@ -20049,16 +20084,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 42 call $~lib/array/Array#unshift global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 4 i32.ne @@ -20072,9 +20107,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -20088,9 +20123,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 42 @@ -20105,9 +20140,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 43 @@ -20122,9 +20157,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#__get i32.const 44 @@ -20139,9 +20174,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 3 call $~lib/array/Array#__get i32.const 45 @@ -20156,16 +20191,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 41 call $~lib/array/Array#unshift global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 5 i32.ne @@ -20179,9 +20214,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -20195,9 +20230,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 41 @@ -20212,9 +20247,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 42 @@ -20229,9 +20264,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#__get i32.const 43 @@ -20246,9 +20281,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 3 call $~lib/array/Array#__get i32.const 44 @@ -20263,9 +20298,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 4 call $~lib/array/Array#__get i32.const 45 @@ -20280,7 +20315,7 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 4 @@ -20294,9 +20329,9 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=12 local.tee $9 i32.const 0 @@ -20304,15 +20339,15 @@ if i32.const 2640 i32.const 1104 - i32.const 330 + i32.const 344 i32.const 18 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=4 local.tee $10 i32.load @@ -20334,9 +20369,9 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 local.get $9 i32.store offset=12 global.get $~lib/memory/__stack_pointer @@ -20357,9 +20392,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 4 i32.ne @@ -20373,9 +20408,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -20389,9 +20424,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 42 @@ -20406,9 +20441,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 43 @@ -20423,9 +20458,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#__get i32.const 44 @@ -20440,9 +20475,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 3 call $~lib/array/Array#__get i32.const 45 @@ -20457,9 +20492,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#pop global.set $std/array/i global.get $std/array/i @@ -20475,9 +20510,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length i32.const 3 i32.ne @@ -20491,9 +20526,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 call $std/array/internalCapacity i32.const 8 i32.ne @@ -20507,9 +20542,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#__get i32.const 42 @@ -20524,9 +20559,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 1 call $~lib/array/Array#__get i32.const 43 @@ -20541,9 +20576,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#__get i32.const 44 @@ -20562,15 +20597,15 @@ i32.const 4 i32.const 3952 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=52 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const 2 call $~lib/array/Array#slice@varargs local.tee $9 @@ -20601,10 +20636,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const 2 i32.const 4 call $~lib/array/Array#slice @@ -20636,10 +20671,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const 1 i32.const 5 call $~lib/array/Array#slice @@ -20671,12 +20706,12 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 0 global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const 0 call $~lib/array/Array#slice@varargs local.tee $9 @@ -20685,10 +20720,10 @@ local.get $9 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 local.get $9 - local.get $0 + local.get $2 i32.const 0 call $std/array/isArraysEqual i32.eqz @@ -20701,12 +20736,12 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 1 global.set $~argumentsLength global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const -2 call $~lib/array/Array#slice@varargs local.tee $9 @@ -20737,10 +20772,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const 2 i32.const -1 call $~lib/array/Array#slice @@ -20772,10 +20807,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.const -3 i32.const -1 call $~lib/array/Array#slice @@ -20807,9 +20842,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 - local.get $0 + local.get $2 i32.const -1 i32.const -3 call $~lib/array/Array#slice @@ -20828,18 +20863,18 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $2 i32.const 10 call $~lib/array/Array#slice@varargs - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length if i32.const 0 @@ -20851,7 +20886,7 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 4 @@ -20865,35 +20900,35 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=4 local.set $9 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=12 - local.tee $0 + local.tee $2 i32.const 1 i32.gt_u if - local.get $0 + local.get $2 i32.const 1 i32.shr_u local.set $10 - local.get $0 + local.get $2 i32.const 1 i32.sub - local.set $0 + local.set $2 loop $while-continue|0 - local.get $2 + local.get $1 local.get $10 i32.lt_u if local.get $9 - local.get $2 + local.get $1 i32.const 2 i32.shl i32.add @@ -20902,8 +20937,8 @@ local.set $12 local.get $11 local.get $9 - local.get $0 local.get $2 + local.get $1 i32.sub i32.const 2 i32.shl @@ -20914,10 +20949,10 @@ local.get $11 local.get $12 i32.store - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $while-continue|0 end end @@ -20928,9 +20963,9 @@ global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 3 i32.ne @@ -20944,9 +20979,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $std/array/internalCapacity i32.const 8 i32.ne @@ -20960,9 +20995,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#__get i32.const 44 @@ -20977,9 +21012,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#__get i32.const 43 @@ -20994,9 +21029,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#__get i32.const 42 @@ -21011,16 +21046,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 44 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer @@ -21035,12 +21070,12 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=60 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|0 @@ -21049,15 +21084,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21091,14 +21126,14 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=64 i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|1 @@ -21107,15 +21142,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21149,14 +21184,14 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=68 i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|2 @@ -21165,15 +21200,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21207,14 +21242,14 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=72 i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|3 @@ -21223,15 +21258,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21265,14 +21300,14 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=76 i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|4 @@ -21281,15 +21316,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21323,14 +21358,14 @@ i32.store local.get $2 call $~lib/array/Array#reverse - local.tee $0 + local.tee $1 i32.store offset=80 i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $2 loop $for-loop|5 @@ -21339,15 +21374,15 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 local.get $3 call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.get $3 i32.sub @@ -21371,9 +21406,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 44 i32.const 0 call $~lib/array/Array#indexOf @@ -21389,9 +21424,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 42 i32.const 0 call $~lib/array/Array#indexOf @@ -21409,9 +21444,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 45 i32.const 0 call $~lib/array/Array#indexOf @@ -21429,9 +21464,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 100 call $~lib/array/Array#indexOf @@ -21449,9 +21484,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -100 call $~lib/array/Array#indexOf @@ -21469,9 +21504,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -2 call $~lib/array/Array#indexOf @@ -21489,9 +21524,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -4 call $~lib/array/Array#indexOf @@ -21509,9 +21544,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 0 call $~lib/array/Array#indexOf @@ -21529,9 +21564,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 1 call $~lib/array/Array#indexOf @@ -21549,9 +21584,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 2 call $~lib/array/Array#indexOf @@ -21572,12 +21607,12 @@ i32.const 9 i32.const 4464 call $~lib/rt/__newArray - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store i32.const 0 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -21590,10 +21625,10 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - block $__inlined_func$~lib/array/Array#indexOf$718 - local.get $2 + block $__inlined_func$~lib/array/Array#indexOf$709 + local.get $1 i32.load offset=12 local.tee $3 i32.eqz @@ -21607,22 +21642,22 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const -1 - local.set $0 - br $__inlined_func$~lib/array/Array#indexOf$718 + local.set $2 + br $__inlined_func$~lib/array/Array#indexOf$709 end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 i32.load offset=4 - local.set $2 + local.set $1 loop $while-continue|05 - local.get $0 + local.get $2 local.get $3 i32.lt_s if + local.get $1 local.get $2 - local.get $0 i32.const 2 i32.shl i32.add @@ -21634,12 +21669,12 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/array/Array#indexOf$718 + br $__inlined_func$~lib/array/Array#indexOf$709 end - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $while-continue|05 end end @@ -21648,9 +21683,9 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const -1 - local.set $0 + local.set $2 end - local.get $0 + local.get $2 i32.const -1 i32.ne if @@ -21666,12 +21701,12 @@ i32.const 12 i32.const 4496 call $~lib/rt/__newArray - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store i32.const 0 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -21684,10 +21719,10 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - block $__inlined_func$~lib/array/Array#indexOf$719 - local.get $2 + block $__inlined_func$~lib/array/Array#indexOf$710 + local.get $1 i32.load offset=12 local.tee $3 i32.eqz @@ -21701,22 +21736,22 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const -1 - local.set $0 - br $__inlined_func$~lib/array/Array#indexOf$719 + local.set $2 + br $__inlined_func$~lib/array/Array#indexOf$710 end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 i32.load offset=4 - local.set $2 + local.set $1 loop $while-continue|07 - local.get $0 + local.get $2 local.get $3 i32.lt_s if + local.get $1 local.get $2 - local.get $0 i32.const 3 i32.shl i32.add @@ -21728,12 +21763,12 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/array/Array#indexOf$719 + br $__inlined_func$~lib/array/Array#indexOf$710 end - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $while-continue|07 end end @@ -21742,9 +21777,9 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const -1 - local.set $0 + local.set $2 end - local.get $0 + local.get $2 i32.const -1 i32.ne if @@ -21761,14 +21796,14 @@ i32.const 4 i32.const 4528 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#lastIndexOf@varargs i32.const 3 @@ -21782,11 +21817,11 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const 7 call $~lib/array/Array#lastIndexOf@varargs i32.const -1 @@ -21800,9 +21835,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 2 i32.const 3 call $~lib/array/Array#lastIndexOf @@ -21817,9 +21852,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 2 i32.const 2 call $~lib/array/Array#lastIndexOf @@ -21832,9 +21867,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 2 i32.const -2 call $~lib/array/Array#lastIndexOf @@ -21847,9 +21882,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 2 i32.const -1 call $~lib/array/Array#lastIndexOf @@ -21865,9 +21900,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 44 i32.const 0 call $~lib/array/Array#includes @@ -21883,9 +21918,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 42 i32.const 0 call $~lib/array/Array#includes @@ -21901,9 +21936,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 45 i32.const 0 call $~lib/array/Array#includes @@ -21917,9 +21952,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 100 call $~lib/array/Array#includes @@ -21933,9 +21968,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -100 call $~lib/array/Array#includes @@ -21951,9 +21986,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -2 call $~lib/array/Array#includes @@ -21969,9 +22004,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const -4 call $~lib/array/Array#includes @@ -21987,9 +22022,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 0 call $~lib/array/Array#includes @@ -22005,9 +22040,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 1 call $~lib/array/Array#includes @@ -22023,9 +22058,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 43 i32.const 2 call $~lib/array/Array#includes @@ -22044,12 +22079,12 @@ i32.const 9 i32.const 4576 call $~lib/rt/__newArray - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store i32.const 0 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -22062,10 +22097,10 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - block $__inlined_func$~lib/array/Array#includes$720 (result i32) - local.get $2 + block $__inlined_func$~lib/array/Array#includes$711 (result i32) + local.get $1 i32.load offset=12 local.tee $3 i32.eqz @@ -22079,21 +22114,21 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$~lib/array/Array#includes$720 + br $__inlined_func$~lib/array/Array#includes$711 end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 i32.load offset=4 - local.set $2 + local.set $1 loop $while-continue|09 - local.get $0 + local.get $2 local.get $3 i32.lt_s if + local.get $1 local.get $2 - local.get $0 i32.const 2 i32.shl i32.add @@ -22107,12 +22142,12 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 1 - br $__inlined_func$~lib/array/Array#includes$720 + br $__inlined_func$~lib/array/Array#includes$711 end - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $while-continue|09 end end @@ -22136,12 +22171,12 @@ i32.const 12 i32.const 4608 call $~lib/rt/__newArray - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store i32.const 0 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -22154,10 +22189,10 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - block $__inlined_func$~lib/array/Array#includes$721 (result i32) - local.get $2 + block $__inlined_func$~lib/array/Array#includes$712 (result i32) + local.get $1 i32.load offset=12 local.tee $3 i32.eqz @@ -22171,21 +22206,21 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$~lib/array/Array#includes$721 + br $__inlined_func$~lib/array/Array#includes$712 end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 i32.load offset=4 - local.set $2 + local.set $1 loop $while-continue|011 - local.get $0 + local.get $2 local.get $3 i32.lt_s if + local.get $1 local.get $2 - local.get $0 i32.const 3 i32.shl i32.add @@ -22199,12 +22234,12 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 1 - br $__inlined_func$~lib/array/Array#includes$721 + br $__inlined_func$~lib/array/Array#includes$712 end - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $while-continue|011 end end @@ -22225,18 +22260,18 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 i32.const 1 call $~lib/array/Array#splice drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 4 i32.ne @@ -22250,9 +22285,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $std/array/internalCapacity i32.const 8 i32.ne @@ -22266,9 +22301,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#__get i32.const 44 @@ -22283,9 +22318,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#__get i32.const 42 @@ -22304,14 +22339,14 @@ i32.const 4 i32.const 4640 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#splice@varargs local.set $2 @@ -22341,7 +22376,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 0 i32.const 2 @@ -22352,7 +22387,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22371,12 +22406,12 @@ i32.const 4 i32.const 4768 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 0 i32.const 0 call $~lib/array/Array#splice @@ -22407,7 +22442,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -22418,7 +22453,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22437,14 +22472,14 @@ i32.const 4 i32.const 4896 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#splice@varargs local.set $2 @@ -22474,7 +22509,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 2 i32.const 2 @@ -22485,7 +22520,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22504,12 +22539,12 @@ i32.const 4 i32.const 5008 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 2 i32.const 2 call $~lib/array/Array#splice @@ -22540,7 +22575,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 3 i32.const 2 @@ -22551,7 +22586,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22570,12 +22605,12 @@ i32.const 4 i32.const 5120 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 0 i32.const 1 call $~lib/array/Array#splice @@ -22606,7 +22641,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 4 i32.const 2 @@ -22617,7 +22652,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22636,14 +22671,14 @@ i32.const 4 i32.const 5248 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const -1 call $~lib/array/Array#splice@varargs local.set $2 @@ -22673,7 +22708,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 4 i32.const 2 @@ -22684,7 +22719,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22703,14 +22738,14 @@ i32.const 4 i32.const 5376 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 i32.const 1 global.set $~argumentsLength - local.get $0 + local.get $1 i32.const -2 call $~lib/array/Array#splice@varargs local.set $2 @@ -22740,7 +22775,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 3 i32.const 2 @@ -22751,7 +22786,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22770,12 +22805,12 @@ i32.const 4 i32.const 5488 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const -2 i32.const 1 call $~lib/array/Array#splice @@ -22806,7 +22841,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 4 i32.const 2 @@ -22817,7 +22852,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22836,12 +22871,12 @@ i32.const 4 i32.const 5616 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const -7 i32.const 1 call $~lib/array/Array#splice @@ -22872,7 +22907,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 4 i32.const 2 @@ -22883,7 +22918,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22902,12 +22937,12 @@ i32.const 4 i32.const 5744 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const -2 i32.const -1 call $~lib/array/Array#splice @@ -22938,7 +22973,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -22949,7 +22984,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -22968,12 +23003,12 @@ i32.const 4 i32.const 5872 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 1 i32.const -2 call $~lib/array/Array#splice @@ -23004,7 +23039,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -23015,7 +23050,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -23034,12 +23069,12 @@ i32.const 4 i32.const 6000 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 4 i32.const 0 call $~lib/array/Array#splice @@ -23070,7 +23105,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -23081,7 +23116,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -23100,12 +23135,12 @@ i32.const 4 i32.const 6128 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 7 i32.const 0 call $~lib/array/Array#splice @@ -23136,7 +23171,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -23147,7 +23182,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -23166,12 +23201,12 @@ i32.const 4 i32.const 6256 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=88 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=48 - local.get $0 + local.get $1 i32.const 7 i32.const 5 call $~lib/array/Array#splice @@ -23202,7 +23237,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -23213,7 +23248,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -23232,13 +23267,13 @@ i32.const 10 i32.const 6384 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=92 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#splice local.tee $2 @@ -23257,9 +23292,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length if i32.const 0 @@ -23312,12 +23347,12 @@ local.get $2 i32.const 2 call $~lib/array/Array#splice - local.tee $0 + local.tee $1 i32.store offset=96 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -23330,9 +23365,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#__get local.set $3 @@ -23352,16 +23387,16 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#__get - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 4 i32.ne @@ -23394,11 +23429,11 @@ local.get $2 i32.const 0 call $~lib/array/Array#__get - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 1 i32.ne @@ -23416,11 +23451,11 @@ local.get $2 i32.const 1 call $~lib/array/Array#__get - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 2 i32.ne @@ -23438,11 +23473,11 @@ local.get $2 i32.const 2 call $~lib/array/Array#__get - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 5 i32.ne @@ -23605,9 +23640,9 @@ local.get $11 i32.const 0 call $~lib/array/Array#__get - local.tee $0 + local.tee $1 i32.store offset=116 - local.get $0 + local.get $1 i32.eqz if i32.const 6544 @@ -23618,9 +23653,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 1 i32.ne @@ -23668,9 +23703,9 @@ local.get $2 i32.const 1 call $~lib/array/Array#__get - local.tee $0 + local.tee $1 i32.store offset=120 - local.get $0 + local.get $1 i32.eqz if i32.const 6544 @@ -23681,9 +23716,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load i32.const 2 i32.ne @@ -23697,44 +23732,44 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 i32.const 0 call $~lib/array/Array#__set global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 i32.const 1 call $~lib/array/Array#__set global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 i32.const 2 call $~lib/array/Array#__set global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 i32.const 3 call $~lib/array/Array#__set global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6672 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6672 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23749,12 +23784,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6704 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6704 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23771,12 +23806,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6736 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6736 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23793,12 +23828,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6768 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6768 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23815,9 +23850,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -23831,12 +23866,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6800 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6800 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23853,40 +23888,40 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6832 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6832 call $~lib/array/Array#findIndex global.set $std/array/i @@ -23903,9 +23938,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -23919,16 +23954,16 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer @@ -23937,15 +23972,15 @@ i32.const 4 i32.const 6864 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=124 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6912 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6912 call $~lib/array/Array#findLastIndex global.set $std/array/i @@ -23959,12 +23994,12 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6944 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6944 call $~lib/array/Array#findLastIndex global.set $std/array/i @@ -23980,12 +24015,12 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 6976 i32.store offset=8 - local.get $0 + local.get $1 i32.const 6976 call $~lib/array/Array#findLastIndex global.set $std/array/i @@ -24001,12 +24036,12 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7008 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7008 call $~lib/array/Array#findLastIndex global.set $std/array/i @@ -24023,12 +24058,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7040 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7040 call $~lib/array/Array#every i32.const 1 @@ -24043,12 +24078,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7072 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7072 call $~lib/array/Array#every if @@ -24061,12 +24096,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7104 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7104 call $~lib/array/Array#every i32.const 1 @@ -24081,9 +24116,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -24097,12 +24132,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7136 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7136 call $~lib/array/Array#every if @@ -24115,40 +24150,40 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7168 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7168 call $~lib/array/Array#every i32.const 1 @@ -24163,9 +24198,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -24179,26 +24214,26 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7200 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7200 call $~lib/array/Array#some i32.const 1 @@ -24213,12 +24248,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7232 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7232 call $~lib/array/Array#some if @@ -24231,12 +24266,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7264 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7264 call $~lib/array/Array#some if @@ -24249,9 +24284,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -24265,12 +24300,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7296 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7296 call $~lib/array/Array#some i32.const 1 @@ -24285,40 +24320,40 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7328 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7328 call $~lib/array/Array#some if @@ -24331,9 +24366,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -24347,28 +24382,28 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push i32.const 0 global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7360 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7360 call $~lib/array/Array#forEach global.get $std/array/i @@ -24386,12 +24421,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7392 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7392 call $~lib/array/Array#forEach global.get $std/array/i @@ -24407,9 +24442,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -24425,12 +24460,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7424 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7424 call $~lib/array/Array#forEach global.get $std/array/i @@ -24446,42 +24481,42 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop i32.const 0 global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7456 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7456 call $~lib/array/Array#forEach global.get $std/array/i @@ -24497,9 +24532,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -24513,33 +24548,33 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 7488 i32.store offset=8 - local.get $0 + local.get $1 i32.const 7488 call $~lib/array/Array#forEach global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 100 i32.ne @@ -24552,52 +24587,52 @@ unreachable end i32.const 0 - local.set $0 + local.set $2 loop $for-loop|6 - local.get $0 + local.get $2 i32.const 100 i32.lt_s if global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $2 + local.tee $1 i32.store - local.get $2 + local.get $1 call $~lib/array/Array#pop drop - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $for-loop|6 end end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer @@ -24640,12 +24675,12 @@ i32.load offset=4 local.set $11 i32.const 0 - local.set $2 + local.set $1 loop $for-loop|012 global.get $~lib/memory/__stack_pointer local.get $3 i32.store - local.get $2 + local.get $1 local.get $9 local.get $3 i32.load offset=12 @@ -24662,7 +24697,7 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=12 - local.get $2 + local.get $1 i32.const 2 i32.shl local.tee $12 @@ -24678,7 +24713,7 @@ global.set $~argumentsLength global.get $~lib/memory/__stack_pointer local.get $13 - local.get $2 + local.get $1 local.get $3 i32.const 9296 i32.load @@ -24694,10 +24729,10 @@ local.get $13 i32.const 1 call $~lib/rt/itcms/__link - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|012 end end @@ -24749,12 +24784,12 @@ i32.load offset=4 local.set $11 i32.const 0 - local.set $2 + local.set $1 loop $for-loop|013 global.get $~lib/memory/__stack_pointer local.get $3 i32.store - local.get $2 + local.get $1 local.get $9 local.get $3 i32.load offset=12 @@ -24771,7 +24806,7 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=12 - local.get $2 + local.get $1 i32.const 2 i32.shl local.tee $12 @@ -24789,16 +24824,16 @@ local.get $12 i32.add local.get $13 - local.get $2 + local.get $1 local.get $3 i32.const 9328 i32.load call_indirect (type $17) f32.store - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|013 end end @@ -24831,9 +24866,9 @@ call $~lib/array/Array#__get global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#__get f32.convert_i32_s @@ -24850,12 +24885,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9360 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9360 call $~lib/array/Array#map global.get $std/array/i @@ -24871,9 +24906,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -24889,12 +24924,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9392 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9392 call $~lib/array/Array#map global.get $std/array/i @@ -24910,42 +24945,42 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop i32.const 0 global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9424 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9424 call $~lib/array/Array#map global.get $std/array/i @@ -24961,9 +24996,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -24977,35 +25012,35 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9456 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.const 9456 call $~lib/array/Array#filter - local.tee $0 + local.tee $1 i32.store offset=136 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -25021,12 +25056,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9488 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9488 call $~lib/array/Array#filter drop @@ -25043,9 +25078,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -25061,12 +25096,12 @@ global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9520 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9520 call $~lib/array/Array#filter drop @@ -25083,42 +25118,42 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop i32.const 0 global.set $std/array/i global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9552 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9552 call $~lib/array/Array#filter drop @@ -25135,9 +25170,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -25151,26 +25186,26 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9584 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9584 i32.const 0 call $~lib/array/Array#reduce @@ -25188,12 +25223,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9616 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9616 i32.const 4 call $~lib/array/Array#reduce @@ -25211,12 +25246,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9648 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9648 i32.const 0 call $~lib/array/Array#reduce @@ -25231,12 +25266,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9680 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9680 i32.const 0 call $~lib/array/Array#reduce @@ -25250,12 +25285,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9712 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9712 i32.const 0 call $~lib/array/Array#reduce @@ -25273,9 +25308,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -25289,12 +25324,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9744 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9744 i32.const 0 call $~lib/array/Array#reduce @@ -25312,40 +25347,40 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9776 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9776 i32.const 0 call $~lib/array/Array#reduce @@ -25363,9 +25398,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 2 i32.ne @@ -25379,26 +25414,26 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9808 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9808 i32.const 0 call $~lib/array/Array#reduceRight @@ -25416,12 +25451,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9840 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9840 i32.const 4 call $~lib/array/Array#reduceRight @@ -25439,12 +25474,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9872 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9872 i32.const 0 call $~lib/array/Array#reduceRight @@ -25459,12 +25494,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9904 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9904 i32.const 0 call $~lib/array/Array#reduceRight @@ -25478,12 +25513,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9936 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9936 i32.const 0 call $~lib/array/Array#reduceRight @@ -25501,9 +25536,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length i32.const 8 i32.ne @@ -25517,12 +25552,12 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 9968 i32.store offset=8 - local.get $0 + local.get $1 i32.const 9968 i32.const 0 call $~lib/array/Array#reduceRight @@ -25540,40 +25575,40 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#pop drop global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 10000 i32.store offset=8 - local.get $0 + local.get $1 i32.const 10000 i32.const 0 call $~lib/array/Array#reduceRight @@ -25591,9 +25626,9 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length if i32.const 0 @@ -25605,30 +25640,30 @@ end global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 0 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 1 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 2 call $~lib/array/Array#push global.get $~lib/memory/__stack_pointer global.get $std/array/arr - local.tee $0 + local.tee $1 i32.store - local.get $0 + local.get $1 i32.const 3 call $~lib/array/Array#push i64.const -7046029254386353131 @@ -25689,7 +25724,7 @@ i32.const 23 i32.const 0 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=140 global.get $~lib/memory/__stack_pointer call $std/array/Dim#constructor @@ -25707,7 +25742,7 @@ local.get $2 i32.const 80 i32.store offset=4 - local.get $0 + local.get $1 i32.const 0 local.get $2 call $~lib/array/Array#__set @@ -25727,7 +25762,7 @@ local.get $2 i32.const 90 i32.store offset=4 - local.get $0 + local.get $1 i32.const 1 local.get $2 call $~lib/array/Array#__set @@ -25747,7 +25782,7 @@ local.get $2 i32.const 95 i32.store offset=4 - local.get $0 + local.get $1 i32.const 2 local.get $2 call $~lib/array/Array#__set @@ -25767,7 +25802,7 @@ local.get $2 i32.const 100 i32.store offset=4 - local.get $0 + local.get $1 i32.const 3 local.get $2 call $~lib/array/Array#__set @@ -25787,7 +25822,7 @@ local.get $2 i32.const 110 i32.store offset=4 - local.get $0 + local.get $1 i32.const 4 local.get $2 call $~lib/array/Array#__set @@ -25807,7 +25842,7 @@ local.get $2 i32.const 115 i32.store offset=4 - local.get $0 + local.get $1 i32.const 5 local.get $2 call $~lib/array/Array#__set @@ -25827,7 +25862,7 @@ local.get $2 i32.const 120 i32.store offset=4 - local.get $0 + local.get $1 i32.const 6 local.get $2 call $~lib/array/Array#__set @@ -25847,7 +25882,7 @@ local.get $2 i32.const 125 i32.store offset=4 - local.get $0 + local.get $1 i32.const 7 local.get $2 call $~lib/array/Array#__set @@ -25867,7 +25902,7 @@ local.get $2 i32.const 130 i32.store offset=4 - local.get $0 + local.get $1 i32.const 8 local.get $2 call $~lib/array/Array#__set @@ -25887,7 +25922,7 @@ local.get $2 i32.const 135 i32.store offset=4 - local.get $0 + local.get $1 i32.const 9 local.get $2 call $~lib/array/Array#__set @@ -25907,7 +25942,7 @@ local.get $2 i32.const 140 i32.store offset=4 - local.get $0 + local.get $1 i32.const 10 local.get $2 call $~lib/array/Array#__set @@ -25927,11 +25962,11 @@ local.get $2 i32.const 140 i32.store offset=4 - local.get $0 + local.get $1 i32.const 11 local.get $2 call $~lib/array/Array#__set - local.get $0 + local.get $1 global.set $std/array/inputStabArr global.get $~lib/memory/__stack_pointer i32.const 12 @@ -25939,7 +25974,7 @@ i32.const 23 i32.const 0 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=192 global.get $~lib/memory/__stack_pointer call $std/array/Dim#constructor @@ -25957,7 +25992,7 @@ local.get $2 i32.const 95 i32.store offset=4 - local.get $0 + local.get $1 i32.const 0 local.get $2 call $~lib/array/Array#__set @@ -25977,7 +26012,7 @@ local.get $2 i32.const 125 i32.store offset=4 - local.get $0 + local.get $1 i32.const 1 local.get $2 call $~lib/array/Array#__set @@ -25997,7 +26032,7 @@ local.get $2 i32.const 130 i32.store offset=4 - local.get $0 + local.get $1 i32.const 2 local.get $2 call $~lib/array/Array#__set @@ -26017,7 +26052,7 @@ local.get $2 i32.const 140 i32.store offset=4 - local.get $0 + local.get $1 i32.const 3 local.get $2 call $~lib/array/Array#__set @@ -26037,7 +26072,7 @@ local.get $2 i32.const 140 i32.store offset=4 - local.get $0 + local.get $1 i32.const 4 local.get $2 call $~lib/array/Array#__set @@ -26057,7 +26092,7 @@ local.get $2 i32.const 110 i32.store offset=4 - local.get $0 + local.get $1 i32.const 5 local.get $2 call $~lib/array/Array#__set @@ -26077,7 +26112,7 @@ local.get $2 i32.const 90 i32.store offset=4 - local.get $0 + local.get $1 i32.const 6 local.get $2 call $~lib/array/Array#__set @@ -26097,7 +26132,7 @@ local.get $2 i32.const 80 i32.store offset=4 - local.get $0 + local.get $1 i32.const 7 local.get $2 call $~lib/array/Array#__set @@ -26117,7 +26152,7 @@ local.get $2 i32.const 100 i32.store offset=4 - local.get $0 + local.get $1 i32.const 8 local.get $2 call $~lib/array/Array#__set @@ -26137,7 +26172,7 @@ local.get $2 i32.const 120 i32.store offset=4 - local.get $0 + local.get $1 i32.const 9 local.get $2 call $~lib/array/Array#__set @@ -26157,7 +26192,7 @@ local.get $2 i32.const 135 i32.store offset=4 - local.get $0 + local.get $1 i32.const 10 local.get $2 call $~lib/array/Array#__set @@ -26177,11 +26212,11 @@ local.get $2 i32.const 115 i32.store offset=4 - local.get $0 + local.get $1 i32.const 11 local.get $2 call $~lib/array/Array#__set - local.get $0 + local.get $1 global.set $std/array/outputStabArr global.get $~lib/memory/__stack_pointer i32.const 3 @@ -26189,17 +26224,17 @@ i32.const 9 i32.const 10224 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=244 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 0 global.set $~argumentsLength - local.get $0 + local.get $1 call $~lib/array/Array#sort@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 3 i32.const 2 @@ -26210,7 +26245,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 call $std/array/isArraysEqual i32.eqz @@ -26228,17 +26263,17 @@ i32.const 9 i32.const 10320 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=248 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 0 global.set $~argumentsLength - local.get $0 + local.get $1 call $~lib/array/Array#sort@varargs global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 8 i32.const 2 @@ -26249,7 +26284,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 call $std/array/isArraysEqual i32.eqz @@ -26267,10 +26302,10 @@ i32.const 12 i32.const 10448 call $~lib/rt/__newArray - local.tee $0 + local.tee $2 i32.store offset=252 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 0 global.set $~argumentsLength @@ -26292,7 +26327,7 @@ i32.const 10544 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 10544 @@ -26309,14 +26344,14 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.load offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 - local.get $0 + local.get $2 i32.load offset=12 global.get $~lib/memory/__stack_pointer i32.const 10544 @@ -26331,7 +26366,7 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store i32.const 8 i32.const 3 @@ -26342,9 +26377,9 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=8 - block $__inlined_func$std/array/isArraysEqual$7 (result i32) + block $__inlined_func$std/array/isArraysEqual$4 (result i32) i32.const 0 - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -26357,9 +26392,9 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 call $~lib/array/Array#get:length local.set $9 global.get $~lib/memory/__stack_pointer @@ -26372,20 +26407,20 @@ local.get $9 i32.ne br_if $folding-inner01 - local.get $0 + local.get $2 local.get $3 i32.eq br_if $folding-inner1 loop $for-loop|02 - local.get $2 + local.get $1 local.get $9 i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 local.get $2 + local.get $1 call $~lib/array/Array#__get local.tee $7 local.get $7 @@ -26395,7 +26430,7 @@ local.get $3 i32.store local.get $3 - local.get $2 + local.get $1 call $~lib/array/Array#__get local.tee $7 local.get $7 @@ -26406,10 +26441,10 @@ i32.eqz if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 local.get $2 + local.get $1 call $~lib/array/Array#__get i64.reinterpret_f64 i64.const 63 @@ -26419,7 +26454,7 @@ local.get $3 i32.store local.get $3 - local.get $2 + local.get $1 call $~lib/array/Array#__get i64.reinterpret_f64 i64.const 63 @@ -26428,26 +26463,26 @@ i32.ne br_if $folding-inner01 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 local.get $2 + local.get $1 call $~lib/array/Array#__get local.set $7 global.get $~lib/memory/__stack_pointer local.get $3 i32.store local.get $3 - local.get $2 + local.get $1 call $~lib/array/Array#__get local.get $7 f64.ne br_if $folding-inner01 end - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|02 end end @@ -26458,7 +26493,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$std/array/isArraysEqual$7 + br $__inlined_func$std/array/isArraysEqual$4 end global.get $~lib/memory/__stack_pointer i32.const 4 @@ -26481,10 +26516,10 @@ i32.const 4 i32.const 10672 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=256 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 0 global.set $~argumentsLength @@ -26506,12 +26541,12 @@ i32.const 10720 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 10720 i32.store offset=8 - local.get $0 + local.get $1 i32.const 10720 call $~lib/array/Array#sort drop @@ -26520,7 +26555,7 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -26531,7 +26566,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 i32.const 0 call $std/array/isArraysEqual @@ -26550,10 +26585,10 @@ i32.const 8 i32.const 10800 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=260 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 0 global.set $~argumentsLength @@ -26575,7 +26610,7 @@ i32.const 10848 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 10848 @@ -26592,14 +26627,14 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=4 - local.get $0 + local.get $1 i32.load offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=4 - local.get $0 + local.get $1 i32.load offset=12 global.get $~lib/memory/__stack_pointer i32.const 10848 @@ -26614,7 +26649,7 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 5 i32.const 2 @@ -26625,7 +26660,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=8 - local.get $0 + local.get $1 local.get $2 call $std/array/isArraysEqual i32.eqz @@ -26695,7 +26730,7 @@ global.get $~lib/memory/__stack_pointer i32.const 10000 call $std/array/createReverseOrderedArray - local.tee $0 + local.tee $1 i32.store offset=296 global.get $~lib/memory/__stack_pointer i32.const 512 @@ -26864,17 +26899,17 @@ unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $std/array/assertSortedDefault global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer local.get $12 i32.store offset=8 - local.get $0 + local.get $1 local.get $12 i32.const 4 call $std/array/isArraysEqual @@ -26907,7 +26942,7 @@ global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer global.get $std/array/inputStabArr - local.tee $0 + local.tee $2 i32.store offset=8 i32.const 1 global.set $~argumentsLength @@ -26923,7 +26958,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 8 @@ -26937,9 +26972,9 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=12 local.tee $3 i32.const 0 @@ -26972,9 +27007,9 @@ i32.load offset=4 local.set $11 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.load offset=4 local.get $9 i32.const 2 @@ -26982,20 +27017,20 @@ i32.add local.set $9 i32.const 0 - local.set $0 + local.set $2 local.get $3 i32.const 2 i32.shl local.set $3 loop $while-continue|06 - local.get $0 + local.get $2 local.get $3 i32.lt_u if - local.get $0 + local.get $2 local.get $11 i32.add - local.get $0 + local.get $2 local.get $9 i32.add i32.load @@ -27005,10 +27040,10 @@ local.get $12 i32.const 1 call $~lib/rt/itcms/__link - local.get $0 + local.get $2 i32.const 4 i32.add - local.set $0 + local.set $2 br $while-continue|06 end end @@ -27029,10 +27064,10 @@ local.get $10 i32.const 11216 call $~lib/array/Array#sort - local.tee $0 + local.tee $2 i32.store offset=12 i32.const 1 - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer global.get $std/array/inputStabArr local.tee $3 @@ -27047,10 +27082,10 @@ if block $for-break0 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 local.get $4 call $~lib/array/Array#__get local.tee $9 @@ -27093,7 +27128,7 @@ end if i32.const 0 - local.set $2 + local.set $1 br $for-break0 end local.get $4 @@ -27104,7 +27139,7 @@ end end end - local.get $2 + local.get $1 i32.eqz if i32.const 0 @@ -27121,7 +27156,7 @@ global.get $~lib/memory/__stack_pointer i32.const 64 call $std/array/createRandomOrderedArray - local.tee $0 + local.tee $1 i32.store offset=304 global.get $~lib/memory/__stack_pointer i32.const 257 @@ -27129,21 +27164,21 @@ local.tee $2 i32.store offset=308 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 11248 i32.store offset=8 - local.get $0 + local.get $1 i32.const 11248 call $std/array/assertSorted global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 11280 i32.store offset=8 - local.get $0 + local.get $1 i32.const 11280 call $std/array/assertSorted global.get $~lib/memory/__stack_pointer @@ -27272,9 +27307,9 @@ local.get $3 i32.store i32.const 0 - local.set $0 + local.set $2 loop $for-loop|015 - local.get $0 + local.get $2 i32.const 2 i32.lt_s if @@ -27289,7 +27324,7 @@ local.get $4 i32.const 0 i32.const 1 - local.get $0 + local.get $2 i32.sub call $~lib/array/Array#__set global.get $~lib/memory/__stack_pointer @@ -27299,13 +27334,13 @@ local.get $4 i32.store offset=12 local.get $3 - local.get $0 + local.get $2 local.get $4 call $~lib/array/Array#__set - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $for-loop|015 end end @@ -27358,88 +27393,88 @@ i32.const 16 i32.const 32 call $~lib/rt/itcms/__new - local.tee $3 + local.tee $4 i32.store global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 0 i32.store - local.get $3 + local.get $4 i32.const 0 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 0 i32.store offset=12 global.get $~lib/memory/__stack_pointer i32.const 2048 i32.const 1 call $~lib/rt/itcms/__new - local.tee $4 + local.tee $3 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=12 local.get $3 + i32.store offset=12 local.get $4 - i32.store local.get $3 + i32.store local.get $4 + local.get $3 i32.const 0 call $~lib/rt/itcms/__link global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 local.get $4 + local.get $3 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 2048 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 - local.get $3 + local.get $4 i32.const 512 i32.store offset=12 global.get $~lib/memory/__stack_pointer i32.const 16 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store i32.const 0 - local.set $2 + local.set $3 loop $for-loop|06 - local.get $2 + local.get $3 i32.const 512 i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -27456,14 +27491,14 @@ i32.const 4 i32.const 31 call $~lib/rt/itcms/__new - local.tee $4 + local.tee $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $2 i32.store offset=4 - local.get $4 - i32.const 511 local.get $2 + i32.const 511 + local.get $3 i32.sub i32.store global.get $~lib/memory/__stack_pointer @@ -27471,16 +27506,16 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $2 i32.store offset=8 + local.get $4 local.get $3 local.get $2 - local.get $4 call $~lib/array/Array#__set - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|06 end end @@ -27488,15 +27523,15 @@ i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store offset=316 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $4 i32.store global.get $~lib/memory/__stack_pointer i32.const 11408 i32.store offset=8 - local.get $3 + local.get $4 i32.const 11408 call $std/array/assertSorted<~lib/array/Array> global.get $~lib/memory/__stack_pointer @@ -27505,7 +27540,7 @@ i32.const 34 i32.const 11600 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=320 global.get $~lib/memory/__stack_pointer i32.const 7 @@ -27516,7 +27551,7 @@ local.tee $2 i32.store offset=324 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store i32.const 1 global.set $~argumentsLength @@ -27538,7 +27573,7 @@ i32.const 11696 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 11696 @@ -27558,12 +27593,12 @@ i64.const 0 i64.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 11696 i32.store offset=12 - local.get $0 + local.get $1 i32.const 11696 call $~lib/array/Array#sort local.set $3 @@ -27595,7 +27630,7 @@ local.get $3 call $~lib/array/Array#get:length local.set $9 - block $__inlined_func$std/array/isSorted<~lib/string/String|null>$666 (result i32) + block $__inlined_func$std/array/isSorted<~lib/string/String|null>$657 (result i32) loop $for-loop|07 local.get $4 local.get $9 @@ -27641,7 +27676,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$std/array/isSorted<~lib/string/String|null>$666 + br $__inlined_func$std/array/isSorted<~lib/string/String|null>$657 end local.get $4 i32.const 1 @@ -27674,7 +27709,7 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer local.get $2 @@ -27694,9 +27729,9 @@ i32.const 0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 call $~lib/array/Array#get:length local.set $3 global.get $~lib/memory/__stack_pointer @@ -27715,7 +27750,7 @@ i32.const 0 br $__inlined_func$std/array/isArraysEqual<~lib/string/String|null>$752 end - local.get $0 + local.get $1 local.get $2 i32.eq if @@ -27734,9 +27769,9 @@ i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 local.get $4 call $~lib/array/Array#__get local.set $9 @@ -27916,9 +27951,9 @@ local.get $10 i32.store i32.const 0 - local.set $2 + local.set $1 loop $for-loop|019 - local.get $2 + local.get $1 i32.const 400 i32.lt_s if @@ -27945,7 +27980,7 @@ i32.const 0 i32.store offset=8 i32.const 11568 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 11568 i32.store @@ -27957,7 +27992,7 @@ i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer call $~lib/math/NativeMath.random @@ -28022,10 +28057,10 @@ global.get $~lib/memory/__stack_pointer local.get $3 i32.store offset=8 - local.get $0 + local.get $2 local.get $3 call $~lib/string/String.__concat - local.tee $0 + local.tee $2 i32.store local.get $4 i32.const 1 @@ -28039,16 +28074,16 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store offset=8 local.get $10 + local.get $1 local.get $2 - local.get $0 call $~lib/array/Array#__set - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 + local.set $1 br $for-loop|019 end end @@ -28098,9 +28133,9 @@ i32.const 37 i32.const 11760 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -28114,22 +28149,22 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=4 local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=12 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 11856 i32.store i32.const 0 - local.set $2 + local.set $1 i32.const 0 local.set $4 global.get $~lib/memory/__stack_pointer @@ -28143,8 +28178,8 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinBooleanArray$12 - local.get $0 + block $__inlined_func$~lib/util/string/joinBooleanArray$9 + local.get $2 i32.const 1 i32.sub local.tee $9 @@ -28156,8 +28191,8 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - local.set $0 - br $__inlined_func$~lib/util/string/joinBooleanArray$12 + local.set $2 + br $__inlined_func$~lib/util/string/joinBooleanArray$9 end block $folding-inner07 local.get $9 @@ -28168,7 +28203,7 @@ local.get $3 i32.load8_u select - local.set $0 + local.set $2 br $folding-inner07 end global.get $~lib/memory/__stack_pointer @@ -28191,7 +28226,7 @@ i32.shl i32.const 2 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store offset=4 loop $for-loop|18 local.get $4 @@ -28207,8 +28242,8 @@ i32.const 4 i32.add local.set $13 - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add @@ -28220,14 +28255,14 @@ i32.const 1 i32.shl memory.copy - local.get $2 + local.get $1 local.get $13 i32.add - local.set $2 + local.set $1 local.get $10 if - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add @@ -28236,10 +28271,10 @@ i32.const 1 i32.shl memory.copy - local.get $2 + local.get $1 local.get $10 i32.add - local.set $2 + local.set $1 end local.get $4 i32.const 1 @@ -28257,8 +28292,8 @@ i32.const 4 i32.add local.set $4 - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add @@ -28270,27 +28305,27 @@ i32.const 1 i32.shl memory.copy - local.get $2 + local.get $1 local.get $4 i32.add - local.tee $2 + local.tee $1 local.get $11 i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 local.get $2 + local.get $1 call $~lib/string/String#substring - local.set $0 + local.set $2 br $folding-inner07 end global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinBooleanArray$12 + br $__inlined_func$~lib/util/string/joinBooleanArray$9 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -28302,9 +28337,9 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 11888 call $~lib/string/String.__eq i32.eqz @@ -28321,18 +28356,18 @@ i32.const 4 i32.const 11936 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 11568 call $~lib/array/Array#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 11968 call $~lib/string/String.__eq i32.eqz @@ -28349,18 +28384,18 @@ i32.const 8 i32.const 12000 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 12032 call $~lib/array/Array#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 11968 call $~lib/string/String.__eq i32.eqz @@ -28377,18 +28412,18 @@ i32.const 4 i32.const 12064 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 12096 call $~lib/array/Array#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 12128 call $~lib/string/String.__eq i32.eqz @@ -28405,9 +28440,9 @@ i32.const 12 i32.const 12208 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -28421,28 +28456,28 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=12 global.get $~lib/memory/__stack_pointer i32.const 12288 i32.store call $~lib/util/string/joinFloatArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 13456 call $~lib/string/String.__eq i32.eqz @@ -28459,18 +28494,18 @@ i32.const 34 i32.const 13600 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 i32.const 11568 call $~lib/array/Array<~lib/string/String|null>#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 13568 call $~lib/string/String.__eq i32.eqz @@ -28512,11 +28547,11 @@ i32.store offset=8 local.get $2 call $~lib/array/Array#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 13696 call $~lib/string/String.__eq i32.eqz @@ -28554,11 +28589,11 @@ i32.store offset=8 local.get $2 call $~lib/array/Array#join - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 13792 call $~lib/string/String.__eq i32.eqz @@ -28576,7 +28611,7 @@ i32.const 4 i32.const 13888 call $~lib/rt/__newArray - local.tee $0 + local.tee $1 i32.store offset=348 global.get $~lib/memory/__stack_pointer i32.const 1 @@ -28603,15 +28638,15 @@ local.tee $4 i32.store offset=360 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 11568 call $~lib/string/String.__eq i32.eqz @@ -28628,11 +28663,11 @@ i32.store offset=8 local.get $2 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 13568 call $~lib/string/String.__eq i32.eqz @@ -28649,11 +28684,11 @@ i32.store offset=8 local.get $3 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 14032 call $~lib/string/String.__eq i32.eqz @@ -28670,11 +28705,11 @@ i32.store offset=8 local.get $4 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 14064 call $~lib/string/String.__eq i32.eqz @@ -28691,17 +28726,17 @@ i32.const 38 i32.const 14112 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 14144 call $~lib/string/String.__eq i32.eqz @@ -28718,17 +28753,17 @@ i32.const 38 i32.const 14176 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 - local.get $0 + local.get $1 call $~lib/array/Array#toString - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.const 14208 call $~lib/string/String.__eq i32.eqz @@ -28745,9 +28780,9 @@ i32.const 11 i32.const 14256 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -28761,7 +28796,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 4 @@ -28775,17 +28810,17 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=4 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=12 - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 11856 i32.store @@ -28801,10 +28836,10 @@ i64.const 0 i64.store block $__inlined_func$~lib/util/string/joinIntegerArray$745 - local.get $0 + local.get $1 i32.const 1 i32.sub - local.tee $3 + local.tee $1 i32.const 0 i32.lt_s if @@ -28813,16 +28848,16 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - local.set $0 + local.set $2 br $__inlined_func$~lib/util/string/joinIntegerArray$745 end - local.get $3 + local.get $1 i32.eqz if - local.get $2 + local.get $3 i32.load16_u call $~lib/util/number/utoa32 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add @@ -28840,7 +28875,7 @@ local.tee $4 i32.const 10 i32.add - local.get $3 + local.get $1 i32.mul i32.const 10 i32.add @@ -28849,32 +28884,32 @@ i32.shl i32.const 2 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store offset=4 loop $for-loop|03 - local.get $3 + local.get $1 local.get $5 i32.gt_s if + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add - local.get $2 + local.get $3 local.get $5 i32.const 1 i32.shl i32.add i32.load16_u call $~lib/util/number/itoa_buffered - local.get $1 + local.get $0 i32.add - local.set $1 + local.set $0 local.get $4 if + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add @@ -28883,10 +28918,10 @@ i32.const 1 i32.shl memory.copy - local.get $1 + local.get $0 local.get $4 i32.add - local.set $1 + local.set $0 end local.get $5 i32.const 1 @@ -28896,30 +28931,30 @@ end end local.get $9 + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add - local.get $2 local.get $3 + local.get $1 i32.const 1 i32.shl i32.add i32.load16_u call $~lib/util/number/itoa_buffered - local.get $1 + local.get $0 i32.add - local.tee $1 + local.tee $0 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store + local.get $2 local.get $0 - local.get $1 call $~lib/string/String#substring - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add @@ -28940,9 +28975,9 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 14288 call $~lib/string/String.__eq i32.eqz @@ -28959,12 +28994,12 @@ i32.const 39 i32.const 14336 call $~lib/rt/__newArray - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 i32.const 0 - local.set $1 + local.set $0 i32.const 0 local.set $5 global.get $~lib/memory/__stack_pointer @@ -28979,7 +29014,7 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 4 @@ -28993,17 +29028,17 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=4 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store - local.get $0 + local.get $1 i32.load offset=12 - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 11856 i32.store @@ -29019,10 +29054,10 @@ i64.const 0 i64.store block $__inlined_func$~lib/util/string/joinIntegerArray$746 - local.get $0 + local.get $1 i32.const 1 i32.sub - local.tee $3 + local.tee $1 i32.const 0 i32.lt_s if @@ -29031,16 +29066,16 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - local.set $0 + local.set $2 br $__inlined_func$~lib/util/string/joinIntegerArray$746 end - local.get $3 + local.get $1 i32.eqz if - local.get $2 + local.get $3 i32.load16_s call $~lib/util/number/itoa32 - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add @@ -29058,7 +29093,7 @@ local.tee $4 i32.const 11 i32.add - local.get $3 + local.get $1 i32.mul i32.const 11 i32.add @@ -29067,32 +29102,32 @@ i32.shl i32.const 2 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store offset=4 loop $for-loop|05 - local.get $3 + local.get $1 local.get $5 i32.gt_s if + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add - local.get $2 + local.get $3 local.get $5 i32.const 1 i32.shl i32.add i32.load16_s call $~lib/util/number/itoa_buffered - local.get $1 + local.get $0 i32.add - local.set $1 + local.set $0 local.get $4 if + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add @@ -29101,10 +29136,10 @@ i32.const 1 i32.shl memory.copy - local.get $1 + local.get $0 local.get $4 i32.add - local.set $1 + local.set $0 end local.get $5 i32.const 1 @@ -29114,30 +29149,30 @@ end end local.get $9 + local.get $2 local.get $0 - local.get $1 i32.const 1 i32.shl i32.add - local.get $2 local.get $3 + local.get $1 i32.const 1 i32.shl i32.add i32.load16_s call $~lib/util/number/itoa_buffered - local.get $1 + local.get $0 i32.add - local.tee $1 + local.tee $0 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store + local.get $2 local.get $0 - local.get $1 call $~lib/string/String#substring - local.set $0 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add @@ -29158,9 +29193,9 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 14368 call $~lib/string/String.__eq i32.eqz @@ -29310,7 +29345,7 @@ i32.store local.get $0 i32.load offset=4 - local.set $1 + local.set $3 global.get $~lib/memory/__stack_pointer local.get $0 i32.store @@ -29321,7 +29356,7 @@ i32.const 11856 i32.store i32.const 0 - local.set $2 + local.set $1 i32.const 0 local.set $4 global.get $~lib/memory/__stack_pointer @@ -29335,11 +29370,11 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$13 + block $__inlined_func$~lib/util/string/joinIntegerArray$10 local.get $0 i32.const 1 i32.sub - local.tee $3 + local.tee $0 i32.const 0 i32.lt_s if @@ -29348,15 +29383,15 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 11568 - local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$13 + local.set $2 + br $__inlined_func$~lib/util/string/joinIntegerArray$10 end block $folding-inner09 - local.get $3 + local.get $0 i32.eqz if block $__inlined_func$~lib/util/number/itoa64$4 (result i32) - local.get $1 + local.get $3 i64.load i64.extend32_s local.set $6 @@ -29541,7 +29576,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 end - local.set $0 + local.set $2 br $folding-inner09 end global.get $~lib/memory/__stack_pointer @@ -29555,7 +29590,7 @@ local.tee $5 i32.const 21 i32.add - local.get $3 + local.get $0 i32.mul i32.const 21 i32.add @@ -29564,32 +29599,32 @@ i32.shl i32.const 2 call $~lib/rt/itcms/__new - local.tee $0 + local.tee $2 i32.store offset=4 loop $for-loop|010 - local.get $3 + local.get $0 local.get $4 i32.gt_s if - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add - local.get $1 + local.get $3 local.get $4 i32.const 3 i32.shl i32.add i64.load call $~lib/util/number/itoa_buffered - local.get $2 + local.get $1 i32.add - local.set $2 + local.set $1 local.get $5 if - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add @@ -29598,10 +29633,10 @@ i32.const 1 i32.shl memory.copy - local.get $2 + local.get $1 local.get $5 i32.add - local.set $2 + local.set $1 end local.get $4 i32.const 1 @@ -29611,37 +29646,37 @@ end end local.get $9 - local.get $0 local.get $2 + local.get $1 i32.const 1 i32.shl i32.add - local.get $1 local.get $3 + local.get $0 i32.const 3 i32.shl i32.add i64.load call $~lib/util/number/itoa_buffered - local.get $2 + local.get $1 i32.add - local.tee $1 + local.tee $0 i32.gt_s if global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store + local.get $2 local.get $0 - local.get $1 call $~lib/string/String#substring - local.set $0 + local.set $2 br $folding-inner09 end global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$13 + br $__inlined_func$~lib/util/string/joinIntegerArray$10 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -29657,9 +29692,9 @@ i32.add global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $2 i32.store - local.get $0 + local.get $2 i32.const 14704 call $~lib/string/String.__eq i32.eqz @@ -29811,7 +29846,7 @@ i32.const 0 i32.const 20 memory.fill - block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$14 + block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$11 local.get $1 i32.const 1 i32.sub @@ -29825,7 +29860,7 @@ global.set $~lib/memory/__stack_pointer i32.const 11568 local.set $3 - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$14 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$11 end local.get $1 i32.eqz @@ -29850,7 +29885,7 @@ i32.const 20 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$14 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$11 end i32.const 11568 local.set $3 @@ -30064,7 +30099,7 @@ i32.const 0 i32.const 20 memory.fill - block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$15 + block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$12 local.get $1 i32.const 1 i32.sub @@ -30078,7 +30113,7 @@ global.set $~lib/memory/__stack_pointer i32.const 11568 local.set $3 - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$15 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$12 end local.get $1 i32.eqz @@ -30103,7 +30138,7 @@ i32.const 20 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$15 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array>$12 end i32.const 11568 local.set $3 @@ -30321,7 +30356,7 @@ i32.const 0 i32.const 20 memory.fill - block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$16 + block $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$13 local.get $1 i32.const 1 i32.sub @@ -30335,7 +30370,7 @@ global.set $~lib/memory/__stack_pointer i32.const 11568 local.set $3 - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$16 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$13 end local.get $1 i32.eqz @@ -30360,7 +30395,7 @@ i32.const 20 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$16 + br $__inlined_func$~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>>$13 end i32.const 11568 local.set $3 @@ -30539,12 +30574,12 @@ global.get $~lib/memory/__stack_pointer local.get $1 call $~lib/array/Array<~lib/array/Array>#flat - local.tee $1 + local.tee $0 i32.store offset=404 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store - local.get $1 + local.get $0 call $~lib/array/Array#get:length i32.const 10 i32.ne @@ -30557,19 +30592,19 @@ unreachable end i32.const 0 - local.set $0 + local.set $2 loop $for-loop|7 - local.get $0 + local.get $2 i32.const 10 i32.lt_s if global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store - local.get $1 local.get $0 + local.get $2 call $~lib/array/Array#__get - local.get $0 + local.get $2 i32.ne if i32.const 0 @@ -30579,10 +30614,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 + local.set $2 br $for-loop|7 end end @@ -30630,10 +30665,14 @@ local.get $1 i32.store offset=412 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer local.get $1 i32.store global.get $~lib/memory/__stack_pointer + i32.const 0 + local.set $4 + i32.const 0 + local.set $0 + global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer @@ -30660,23 +30699,21 @@ i32.load offset=12 local.set $1 i32.const 0 - local.set $4 - i32.const 0 - local.set $0 - loop $for-loop|023 - local.get $0 + local.set $2 + loop $for-loop|018 local.get $1 - i32.lt_s + local.get $2 + i32.gt_s if local.get $5 - local.get $0 + local.get $2 i32.const 2 i32.shl i32.add i32.load - local.tee $2 + local.tee $9 if (result i32) - local.get $2 + local.get $9 i32.load offset=12 else i32.const 0 @@ -30684,18 +30721,18 @@ local.get $4 i32.add local.set $4 - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 - br $for-loop|023 + local.set $2 + br $for-loop|018 end end global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 i32.shl - local.tee $0 + local.tee $2 i32.const 1 call $~lib/rt/itcms/__new local.tee $9 @@ -30710,7 +30747,7 @@ local.get $4 i32.store offset=12 local.get $10 - local.get $0 + local.get $2 i32.store offset=8 local.get $10 local.get $9 @@ -30723,10 +30760,8 @@ i32.const 0 call $~lib/rt/itcms/__link i32.const 0 - local.set $0 - i32.const 0 local.set $2 - loop $for-loop|124 + loop $for-loop|119 local.get $1 local.get $2 i32.gt_s @@ -30759,30 +30794,30 @@ i32.const 1 i32.add local.set $2 - br $for-loop|124 + br $for-loop|119 end end i32.const 0 - local.set $0 - loop $for-loop|225 - local.get $0 + local.set $2 + loop $for-loop|220 + local.get $2 local.get $4 i32.lt_s if local.get $9 local.get $9 - local.get $0 + local.get $2 i32.const 2 i32.shl i32.add i32.load i32.const 1 call $~lib/rt/itcms/__link - local.get $0 + local.get $2 i32.const 1 i32.add - local.set $0 - br $for-loop|225 + local.set $2 + br $for-loop|220 end end global.get $~lib/memory/__stack_pointer @@ -30815,21 +30850,21 @@ unreachable end i32.const 0 - local.set $2 + local.set $3 loop $for-loop|8 global.get $~lib/memory/__stack_pointer local.get $0 i32.store local.get $0 call $~lib/array/Array#get:length - local.get $2 + local.get $3 i32.gt_s if global.get $~lib/memory/__stack_pointer local.get $10 i32.store offset=48 local.get $10 - local.get $2 + local.get $3 call $~lib/array/Array#__get local.set $1 global.get $~lib/memory/__stack_pointer @@ -30839,14 +30874,14 @@ local.get $0 i32.store offset=48 local.get $0 - local.get $2 + local.get $3 call $~lib/array/Array#__get - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=8 local.get $1 - local.get $3 + local.get $2 call $~lib/string/String.__eq i32.eqz if @@ -30857,10 +30892,10 @@ call $~lib/builtins/abort unreachable end - local.get $2 + local.get $3 i32.const 1 i32.add - local.set $2 + local.set $3 br $for-loop|8 end end @@ -30917,9 +30952,9 @@ i32.const 29 i32.const 0 call $~lib/rt/__newArray - local.tee $1 + local.tee $2 i32.store offset=432 - local.get $1 + local.get $2 i32.const 0 i32.const 1 i32.const 2 @@ -30927,7 +30962,7 @@ i32.const 15920 call $~lib/rt/__newArray call $~lib/array/Array#__set - local.get $1 + local.get $2 i32.const 1 i32.const 1 i32.const 2 @@ -30935,11 +30970,11 @@ i32.const 15952 call $~lib/rt/__newArray call $~lib/array/Array#__set - local.get $1 + local.get $2 i32.store offset=436 global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 15984 @@ -30957,10 +30992,10 @@ i32.const 24 memory.fill global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.load offset=12 local.tee $3 i32.const 2 @@ -30976,14 +31011,14 @@ i32.load offset=4 local.set $5 i32.const 0 - local.set $2 - loop $for-loop|026 + local.set $1 + loop $for-loop|023 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store local.get $2 - local.get $3 + i32.store local.get $1 + local.get $3 + local.get $2 i32.load offset=12 local.tee $9 local.get $3 @@ -30996,28 +31031,28 @@ i32.const 15984 i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store offset=16 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.const 2 i32.shl local.tee $9 - local.get $1 + local.get $2 i32.load offset=4 i32.add i32.load local.tee $10 i32.store global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store offset=12 i32.const 3 global.set $~argumentsLength global.get $~lib/memory/__stack_pointer local.get $10 - local.get $2 local.get $1 + local.get $2 i32.const 15984 i32.load call_indirect (type $1) @@ -31032,11 +31067,11 @@ local.get $10 i32.const 1 call $~lib/rt/itcms/__link - local.get $2 + local.get $1 i32.const 1 i32.add - local.set $2 - br $for-loop|026 + local.set $1 + br $for-loop|023 end end global.get $~lib/memory/__stack_pointer @@ -31141,12 +31176,12 @@ i32.const 0 i32.gt_s if - loop $while-continue|028 + loop $while-continue|025 global.get $~lib/rt/itcms/state if call $~lib/rt/itcms/step drop - br $while-continue|028 + br $while-continue|025 end end end diff --git a/tests/compiler/std/arraybuffer.debug.wat b/tests/compiler/std/arraybuffer.debug.wat index 62e83133db..d09f931298 100644 --- a/tests/compiler/std/arraybuffer.debug.wat +++ b/tests/compiler/std/arraybuffer.debug.wat @@ -10,10 +10,12 @@ (type $8 (func (param i32 i32 i32 i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -233,7 +235,7 @@ if i32.const 336 i32.const 400 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2670,210 +2672,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 144 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/dataview/DataView - block $~lib/typedarray/Float64Array - block $~lib/typedarray/Float32Array - block $~lib/typedarray/Uint64Array - block $~lib/typedarray/Int64Array - block $~lib/typedarray/Uint32Array - block $~lib/typedarray/Int32Array - block $~lib/typedarray/Uint16Array - block $~lib/typedarray/Int16Array - block $~lib/typedarray/Uint8ClampedArray - block $~lib/typedarray/Uint8Array - block $~lib/typedarray/Int8Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/dataview/DataView $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8ClampedArray~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/dataview/DataView~visit - return - end - unreachable - ) (func $~start call $start:std/arraybuffer ) @@ -2890,6 +2688,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/arraybuffer/ArrayBuffer#slice (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $length i32) (local $4 i32) @@ -3855,32 +3685,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) (local $buffer i32) (local $3 i32) @@ -3953,6 +3757,10 @@ local.get $array local.get $buffer i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $buffer i32.const 0 @@ -3975,4 +3783,238 @@ local.get $7 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/dataview/DataView + block $~lib/typedarray/Float64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Int64Array + block $~lib/typedarray/Uint32Array + block $~lib/typedarray/Int32Array + block $~lib/typedarray/Uint16Array + block $~lib/typedarray/Int16Array + block $~lib/typedarray/Uint8ClampedArray + block $~lib/typedarray/Uint8Array + block $~lib/typedarray/Int8Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/dataview/DataView $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/dataview/DataView~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/arraybuffer.release.wat b/tests/compiler/std/arraybuffer.release.wat index 5e80739f7e..21ed5a6164 100644 --- a/tests/compiler/std/arraybuffer.release.wat +++ b/tests/compiler/std/arraybuffer.release.wat @@ -7,7 +7,7 @@ (type $5 (func (param i32 i32 i32) (result i32))) (type $6 (func (result i32))) (type $7 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -43,6 +43,41 @@ (data $13 (i32.const 1712) "\11\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\02\t\00\00A\08\00\00A\00\00\00A\00\00\00\81\08\00\00\81\00\00\00\01\t\00\00\01\01\00\00\01\n\00\00\01\02\00\00\01\19\00\00\01\1a") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1784 + i32.lt_s + if + i32.const 34576 + i32.const 34624 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -1207,7 +1242,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$185 + block $__inlined_func$~lib/rt/itcms/Object#unlink$186 local.get $0 i32.load offset=4 i32.const -4 @@ -1231,7 +1266,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$185 + br $__inlined_func$~lib/rt/itcms/Object#unlink$186 end local.get $0 i32.load offset=8 @@ -1274,7 +1309,7 @@ if i32.const 1360 i32.const 1424 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/bitflags.debug.wat b/tests/compiler/std/bitflags.debug.wat new file mode 100644 index 0000000000..21f585ea42 --- /dev/null +++ b/tests/compiler/std/bitflags.debug.wat @@ -0,0 +1,577 @@ +(module + (type $0 (func)) + (global $~lib/memory/__data_end i32 (i32.const 8)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776)) + (global $~lib/memory/__heap_base i32 (i32.const 32776)) + (memory $0 0) + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $start:std/bitflags + (local $flags i32) + (local $bit i32) + (local $flags|2 i32) + (local $bit|3 i32) + (local $flags|4 i32) + (local $bit|5 i32) + (local $flags|6 i32) + (local $mask i32) + (local $flags|8 i32) + (local $mask|9 i32) + (local $flags|10 i32) + (local $index i32) + (local $flags|12 i32) + (local $index|13 i32) + (local $flags|14 i32) + (local $index|15 i32) + (local $flags|16 i32) + (local $bit|17 i32) + (local $flags|18 i32) + (local $bit|19 i32) + (local $flags|20 i32) + (local $bit|21 i32) + (local $flags|22 i32) + (local $bit|23 i32) + (local $flags|24 i32) + (local $bit|25 i32) + (local $flags|26 i32) + (local $bit|27 i32) + (local $flags|28 i32) + (local $flags|29 i32) + (local $flags|30 i32) + (local $flags|31 i32) + (local $flags|32 i32) + (local $flags|33 i32) + (local $flags|34 i64) + (local $bit|35 i64) + (local $flags|36 i64) + (local $index|37 i32) + (local $flags|38 i64) + (local $index|39 i32) + (local $flags|40 i64) + (local $flags|41 i64) + (local $bit|42 i64) + (local $flags|43 i64) + (local $bit|44 i64) + (local $flags|45 i64) + (local $bit|46 i64) + (local $flags|47 i64) + (local $flags|48 i64) + block $~lib/bitflags/BitFlags.has|inlined.0 (result i32) + i32.const 15 + local.set $flags + i32.const 5 + local.set $bit + i32.const 1 + i32.eqz + drop + local.get $flags + local.get $bit + i32.and + local.get $bit + i32.eq + br $~lib/bitflags/BitFlags.has|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.has|inlined.1 (result i32) + i32.const 10 + local.set $flags|2 + i32.const 5 + local.set $bit|3 + i32.const 1 + i32.eqz + drop + local.get $flags|2 + local.get $bit|3 + i32.and + local.get $bit|3 + i32.eq + br $~lib/bitflags/BitFlags.has|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.has|inlined.2 (result i32) + i32.const 15 + local.set $flags|4 + i32.const 0 + local.set $bit|5 + i32.const 1 + i32.eqz + drop + local.get $flags|4 + local.get $bit|5 + i32.and + local.get $bit|5 + i32.eq + br $~lib/bitflags/BitFlags.has|inlined.2 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.hasAny|inlined.0 (result i32) + i32.const 10 + local.set $flags|6 + i32.const 2 + local.set $mask + i32.const 1 + i32.eqz + drop + local.get $flags|6 + local.get $mask + i32.and + i32.const 0 + i32.ne + br $~lib/bitflags/BitFlags.hasAny|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.hasAny|inlined.1 (result i32) + i32.const 8 + local.set $flags|8 + i32.const 5 + local.set $mask|9 + i32.const 1 + i32.eqz + drop + local.get $flags|8 + local.get $mask|9 + i32.and + i32.const 0 + i32.ne + br $~lib/bitflags/BitFlags.hasAny|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.test|inlined.0 (result i32) + i32.const 10 + local.set $flags|10 + i32.const 1 + local.set $index + i32.const 1 + i32.eqz + drop + local.get $flags|10 + i32.const 1 + local.get $index + i32.shl + i32.and + i32.const 0 + i32.ne + br $~lib/bitflags/BitFlags.test|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.test|inlined.1 (result i32) + i32.const 10 + local.set $flags|12 + i32.const 0 + local.set $index|13 + i32.const 1 + i32.eqz + drop + local.get $flags|12 + i32.const 1 + local.get $index|13 + i32.shl + i32.and + i32.const 0 + i32.ne + br $~lib/bitflags/BitFlags.test|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.test|inlined.2 (result i32) + i32.const 10 + local.set $flags|14 + i32.const 3 + local.set $index|15 + i32.const 1 + i32.eqz + drop + local.get $flags|14 + i32.const 1 + local.get $index|15 + i32.shl + i32.and + i32.const 0 + i32.ne + br $~lib/bitflags/BitFlags.test|inlined.2 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.set|inlined.0 (result i32) + i32.const 8 + local.set $flags|16 + i32.const 1 + local.set $bit|17 + i32.const 1 + i32.eqz + drop + local.get $flags|16 + local.get $bit|17 + i32.or + br $~lib/bitflags/BitFlags.set|inlined.0 + end + i32.const 9 + i32.eq + drop + block $~lib/bitflags/BitFlags.set|inlined.1 (result i32) + i32.const 10 + local.set $flags|18 + i32.const 4 + local.set $bit|19 + i32.const 1 + i32.eqz + drop + local.get $flags|18 + local.get $bit|19 + i32.or + br $~lib/bitflags/BitFlags.set|inlined.1 + end + i32.const 14 + i32.eq + drop + block $~lib/bitflags/BitFlags.clear|inlined.0 (result i32) + i32.const 15 + local.set $flags|20 + i32.const 5 + local.set $bit|21 + i32.const 1 + i32.eqz + drop + local.get $flags|20 + local.get $bit|21 + i32.const -1 + i32.xor + i32.and + br $~lib/bitflags/BitFlags.clear|inlined.0 + end + i32.const 10 + i32.eq + drop + block $~lib/bitflags/BitFlags.clear|inlined.1 (result i32) + i32.const 10 + local.set $flags|22 + i32.const 2 + local.set $bit|23 + i32.const 1 + i32.eqz + drop + local.get $flags|22 + local.get $bit|23 + i32.const -1 + i32.xor + i32.and + br $~lib/bitflags/BitFlags.clear|inlined.1 + end + i32.const 8 + i32.eq + drop + block $~lib/bitflags/BitFlags.toggle|inlined.0 (result i32) + i32.const 10 + local.set $flags|24 + i32.const 6 + local.set $bit|25 + i32.const 1 + i32.eqz + drop + local.get $flags|24 + local.get $bit|25 + i32.xor + br $~lib/bitflags/BitFlags.toggle|inlined.0 + end + i32.const 12 + i32.eq + drop + block $~lib/bitflags/BitFlags.toggle|inlined.1 (result i32) + i32.const 15 + local.set $flags|26 + i32.const 15 + local.set $bit|27 + i32.const 1 + i32.eqz + drop + local.get $flags|26 + local.get $bit|27 + i32.xor + br $~lib/bitflags/BitFlags.toggle|inlined.1 + end + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.popcount|inlined.0 (result i32) + i32.const 0 + local.set $flags|28 + i32.const 1 + i32.eqz + drop + local.get $flags|28 + i32.popcnt + br $~lib/bitflags/BitFlags.popcount|inlined.0 + end + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.popcount|inlined.1 (result i32) + i32.const 1 + local.set $flags|29 + i32.const 1 + i32.eqz + drop + local.get $flags|29 + i32.popcnt + br $~lib/bitflags/BitFlags.popcount|inlined.1 + end + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.popcount|inlined.2 (result i32) + i32.const 10 + local.set $flags|30 + i32.const 1 + i32.eqz + drop + local.get $flags|30 + i32.popcnt + br $~lib/bitflags/BitFlags.popcount|inlined.2 + end + i32.const 2 + i32.eq + drop + block $~lib/bitflags/BitFlags.popcount|inlined.3 (result i32) + i32.const -1 + local.set $flags|31 + i32.const 1 + i32.eqz + drop + local.get $flags|31 + i32.popcnt + br $~lib/bitflags/BitFlags.popcount|inlined.3 + end + i32.const 32 + i32.eq + drop + block $~lib/bitflags/BitFlags.isEmpty|inlined.0 (result i32) + i32.const 0 + local.set $flags|32 + i32.const 1 + i32.eqz + drop + local.get $flags|32 + i32.const 0 + i32.eq + br $~lib/bitflags/BitFlags.isEmpty|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.isEmpty|inlined.1 (result i32) + i32.const 1 + local.set $flags|33 + i32.const 1 + i32.eqz + drop + local.get $flags|33 + i32.const 0 + i32.eq + br $~lib/bitflags/BitFlags.isEmpty|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.has|inlined.0 (result i32) + i64.const -1 + local.set $flags|34 + i64.const -9223372036854775808 + local.set $bit|35 + i32.const 1 + i32.eqz + drop + local.get $flags|34 + local.get $bit|35 + i64.and + local.get $bit|35 + i64.eq + br $~lib/bitflags/BitFlags.has|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.test|inlined.0 (result i32) + i64.const -9223372036854775808 + local.set $flags|36 + i32.const 63 + local.set $index|37 + i32.const 1 + i32.eqz + drop + local.get $flags|36 + i64.const 1 + local.get $index|37 + i64.extend_i32_s + i64.shl + i64.and + i64.const 0 + i64.ne + br $~lib/bitflags/BitFlags.test|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.test|inlined.1 (result i32) + i64.const -9223372036854775808 + local.set $flags|38 + i32.const 0 + local.set $index|39 + i32.const 1 + i32.eqz + drop + local.get $flags|38 + i64.const 1 + local.get $index|39 + i64.extend_i32_s + i64.shl + i64.and + i64.const 0 + i64.ne + br $~lib/bitflags/BitFlags.test|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + block $~lib/bitflags/BitFlags.popcount|inlined.0 (result i32) + i64.const -1 + local.set $flags|40 + i32.const 1 + i32.eqz + drop + local.get $flags|40 + i64.popcnt + i32.wrap_i64 + br $~lib/bitflags/BitFlags.popcount|inlined.0 + end + i32.const 64 + i32.eq + drop + block $~lib/bitflags/BitFlags.set|inlined.0 (result i64) + i64.const 0 + local.set $flags|41 + i64.const -9223372036854775808 + local.set $bit|42 + i32.const 1 + i32.eqz + drop + local.get $flags|41 + local.get $bit|42 + i64.or + br $~lib/bitflags/BitFlags.set|inlined.0 + end + i64.const -9223372036854775808 + i64.eq + drop + block $~lib/bitflags/BitFlags.clear|inlined.0 (result i64) + i64.const -1 + local.set $flags|43 + i64.const -9223372036854775808 + local.set $bit|44 + i32.const 1 + i32.eqz + drop + local.get $flags|43 + local.get $bit|44 + i64.const -1 + i64.xor + i64.and + br $~lib/bitflags/BitFlags.clear|inlined.0 + end + i64.const 9223372036854775807 + i64.eq + drop + block $~lib/bitflags/BitFlags.toggle|inlined.0 (result i64) + i64.const 0 + local.set $flags|45 + i64.const -6148914691236517206 + local.set $bit|46 + i32.const 1 + i32.eqz + drop + local.get $flags|45 + local.get $bit|46 + i64.xor + br $~lib/bitflags/BitFlags.toggle|inlined.0 + end + i64.const -6148914691236517206 + i64.eq + drop + block $~lib/bitflags/BitFlags.isEmpty|inlined.0 (result i32) + i64.const 0 + local.set $flags|47 + i32.const 1 + i32.eqz + drop + local.get $flags|47 + i64.const 0 + i64.eq + br $~lib/bitflags/BitFlags.isEmpty|inlined.0 + end + i32.const 0 + i32.ne + i32.const 1 + i32.eq + drop + block $~lib/bitflags/BitFlags.isEmpty|inlined.1 (result i32) + i64.const 1 + local.set $flags|48 + i32.const 1 + i32.eqz + drop + local.get $flags|48 + i64.const 0 + i64.eq + br $~lib/bitflags/BitFlags.isEmpty|inlined.1 + end + i32.const 0 + i32.ne + i32.const 0 + i32.eq + drop + ) + (func $~start + call $start:std/bitflags + ) +) diff --git a/tests/compiler/std/bitflags.json b/tests/compiler/std/bitflags.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/bitflags.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/bitflags.release.wat b/tests/compiler/std/bitflags.release.wat new file mode 100644 index 0000000000..23da3862e2 --- /dev/null +++ b/tests/compiler/std/bitflags.release.wat @@ -0,0 +1,4 @@ +(module + (memory $0 0) + (export "memory" (memory $0)) +) diff --git a/tests/compiler/std/bitflags.ts b/tests/compiler/std/bitflags.ts new file mode 100644 index 0000000000..0d5c958282 --- /dev/null +++ b/tests/compiler/std/bitflags.ts @@ -0,0 +1,48 @@ +import { BitFlags } from "bitflags"; + +// Test has +assert(BitFlags.has(0b1111, 0b0101) == true); +assert(BitFlags.has(0b1010, 0b0101) == false); +assert(BitFlags.has(0b1111, 0b0000) == true); // 0 is always "has" + +// Test hasAny +assert(BitFlags.hasAny(0b1010, 0b0010) == true); +assert(BitFlags.hasAny(0b1000, 0b0101) == false); + +// Test test (single bit) +assert(BitFlags.test(0b1010, 1) == true); +assert(BitFlags.test(0b1010, 0) == false); +assert(BitFlags.test(0b1010, 3) == true); + +// Test set +assert(BitFlags.set(0b1000, 0b0001) == 0b1001); +assert(BitFlags.set(0b1010, 0b0100) == 0b1110); + +// Test clear +assert(BitFlags.clear(0b1111, 0b0101) == 0b1010); +assert(BitFlags.clear(0b1010, 0b0010) == 0b1000); + +// Test toggle +assert(BitFlags.toggle(0b1010, 0b0110) == 0b1100); +assert(BitFlags.toggle(0b1111, 0b1111) == 0b0000); + +// Test popcount +assert(BitFlags.popcount(0) == 0); +assert(BitFlags.popcount(1) == 1); +assert(BitFlags.popcount(0b1010) == 2); +assert(BitFlags.popcount(0xFFFFFFFF) == 32); + +// Test isEmpty +assert(BitFlags.isEmpty(0) == true); +assert(BitFlags.isEmpty(1) == false); + +// Test with u64 +assert(BitFlags.has(0xFFFFFFFFFFFFFFFF, 0x8000000000000000) == true); +assert(BitFlags.test(0x8000000000000000, 63) == true); +assert(BitFlags.test(0x8000000000000000, 0) == false); +assert(BitFlags.popcount(0xFFFFFFFFFFFFFFFF) == 64); +assert(BitFlags.set(0, 0x8000000000000000) == 0x8000000000000000); +assert(BitFlags.clear(0xFFFFFFFFFFFFFFFF, 0x8000000000000000) == 0x7FFFFFFFFFFFFFFF); +assert(BitFlags.toggle(0, 0xAAAAAAAAAAAAAAAA) == 0xAAAAAAAAAAAAAAAA); +assert(BitFlags.isEmpty(0) == true); +assert(BitFlags.isEmpty(1) == false); diff --git a/tests/compiler/std/byteslice.debug.wat b/tests/compiler/std/byteslice.debug.wat new file mode 100644 index 0000000000..8ff1872434 --- /dev/null +++ b/tests/compiler/std/byteslice.debug.wat @@ -0,0 +1,5144 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func (param i32 i32))) + (type $2 (func (param i32))) + (type $3 (func)) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) + (type $8 (func (param i32 i32 i32 i32 i32))) + (type $9 (func (param i32 i32 i64) (result i32))) + (type $10 (func (result i32))) + (type $11 (func (param i64) (result i64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $std/byteslice/BASE i32 (i32.const 8192)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $std/byteslice/s (mut i32) (i32.const 0)) + (global $std/byteslice/WBASE i32 (i32.const 8448)) + (global $std/byteslice/w (mut i32) (i32.const 0)) + (global $std/byteslice/sub (mut i32) (i32.const 0)) + (global $std/byteslice/FBASE i32 (i32.const 8704)) + (global $std/byteslice/f (mut i32) (i32.const 0)) + (global $std/byteslice/a (mut i32) (i32.const 0)) + (global $std/byteslice/b (mut i32) (i32.const 0)) + (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $std/byteslice/CBASE i32 (i32.const 8960)) + (global $std/byteslice/c (mut i32) (i32.const 0)) + (global $std/byteslice/d (mut i32) (i32.const 0)) + (global $std/byteslice/DBASE i32 (i32.const 9216)) + (global $std/byteslice/src (mut i32) (i32.const 0)) + (global $std/byteslice/dst (mut i32) (i32.const 0)) + (global $~argumentsLength (mut i32) (i32.const 0)) + (global $std/byteslice/p (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 592)) + (global $~lib/memory/__data_end i32 (i32.const 616)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33384)) + (global $~lib/memory/__heap_base i32 (i32.const 33384)) + (memory $0 1) + (data $0 (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $1 (i32.const 60) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\"\00\00\00~\00l\00i\00b\00/\00b\00y\00t\00e\00s\00l\00i\00c\00e\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 124) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $3 (i32.const 188) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 256) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 288) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 316) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 380) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 432) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 460) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 524) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00s\00t\00d\00/\00b\00y\00t\00e\00s\00l\00i\00c\00e\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 592) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/byteslice/ByteSlice#set:ptr (param $this i32) (param $ptr i32) + local.get $this + local.get $ptr + i32.store + ) + (func $~lib/byteslice/ByteSlice#set:length (param $this i32) (param $length i32) + local.get $this + local.get $length + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 336 + i32.const 400 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 208 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 144 + i32.const 480 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 144 + i32.const 208 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $~lib/byteslice/ByteSlice#get:length (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/byteslice/ByteSlice#get:ptr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 2 + i32.const 1 + i32.eq + drop + i32.const 2 + i32.const 2 + i32.eq + drop + local.get $value + i32.const 8 + i32.const 15 + i32.and + i32.shl + local.get $value + i32.const 65535 + i32.and + i32.const 8 + i32.const 15 + i32.and + i32.shr_u + i32.or + return + ) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $value + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $value + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $~lib/polyfills/bswap (param $value i64) (result i64) + (local $a i64) + (local $b i64) + (local $v i64) + i32.const 1 + drop + i32.const 8 + i32.const 1 + i32.eq + drop + i32.const 8 + i32.const 2 + i32.eq + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + local.get $value + i64.const 8 + i64.shr_u + i64.const 71777214294589695 + i64.and + local.set $a + local.get $value + i64.const 71777214294589695 + i64.and + i64.const 8 + i64.shl + local.set $b + local.get $a + local.get $b + i64.or + local.set $v + local.get $v + i64.const 16 + i64.shr_u + i64.const 281470681808895 + i64.and + local.set $a + local.get $v + i64.const 281470681808895 + i64.and + i64.const 16 + i64.shl + local.set $b + local.get $a + local.get $b + i64.or + i64.const 32 + i64.rotr + return + ) + (func $~start + call $start:std/byteslice + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33408 + i32.const 33456 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/byteslice/ByteSlice#constructor (param $this i32) (param $ptr i32) (param $length i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $~lib/byteslice/ByteSlice#set:ptr + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + call $~lib/byteslice/ByteSlice#set:length + local.get $length + i32.const 0 + i32.lt_s + if + i32.const 32 + i32.const 80 + i32.const 15 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $ptr + call $~lib/byteslice/ByteSlice#set:ptr + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $length + call $~lib/byteslice/ByteSlice#set:length + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/byteslice/ByteSlice#__get (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 117 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $index + i32.add + i32.load8_u + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/byteslice/ByteSlice#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 122 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $index + i32.add + local.get $value + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/byteslice/ByteSlice#slice (param $this i32) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $newLen i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/byteslice/ByteSlice#get:length + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if + local.get $len + local.get $start + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $start + end + local.get $end + i32.const 0 + i32.lt_s + if + local.get $len + local.get $end + i32.add + local.tee $6 + i32.const 0 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_s + select + local.set $end + end + local.get $start + local.tee $8 + local.get $len + local.tee $9 + local.get $8 + local.get $9 + i32.lt_s + select + local.set $start + local.get $end + local.tee $10 + local.get $len + local.tee $11 + local.get $10 + local.get $11 + i32.lt_s + select + local.set $end + local.get $end + local.get $start + i32.sub + local.tee $12 + i32.const 0 + local.tee $13 + local.get $12 + local.get $13 + i32.gt_s + select + local.set $newLen + i32.const 0 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $start + i32.add + local.get $newLen + call $~lib/byteslice/ByteSlice#constructor + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/byteslice/ByteSlice#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:length + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $start + end + local.get $end + i32.const 0 + i32.lt_s + if + local.get $len + local.get $end + i32.add + local.tee $7 + i32.const 0 + local.tee $8 + local.get $7 + local.get $8 + i32.gt_s + select + local.set $end + end + local.get $start + local.tee $9 + local.get $len + local.tee $10 + local.get $9 + local.get $10 + i32.lt_s + select + local.set $start + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + local.set $end + local.get $start + local.get $end + i32.lt_s + if + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $start + i32.add + local.get $value + local.get $end + local.get $start + i32.sub + memory.fill + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/byteslice/ByteSlice#equals (param $this i32) (param $other i32) (result i32) + (local $vl i32) + (local $vr i32) + (local $n i32) + (local $vl|5 i32) + (local $vr|6 i32) + (local $n|7 i32) + (local $a i32) + (local $b i32) + (local $10 i32) + (local $a|11 i32) + (local $b|12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:length + local.get $other + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:length + i32.ne + if + i32.const 0 + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:length + i32.const 0 + i32.eq + if + i32.const 1 + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + end + block $~lib/memory/memory.compare|inlined.0 (result i32) + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:ptr + local.set $vl + local.get $other + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:ptr + local.set $vr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/byteslice/ByteSlice#get:length + local.set $n + block $~lib/util/memory/memcmp|inlined.0 (result i32) + local.get $vl + local.set $vl|5 + local.get $vr + local.set $vr|6 + local.get $n + local.set $n|7 + local.get $vl|5 + local.get $vr|6 + i32.eq + if + i32.const 0 + br $~lib/util/memory/memcmp|inlined.0 + end + i32.const 0 + i32.const 2 + i32.lt_s + drop + local.get $vl|5 + i32.const 7 + i32.and + local.get $vr|6 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $vl|5 + i32.const 7 + i32.and + if + local.get $n|7 + i32.eqz + if + i32.const 0 + br $~lib/util/memory/memcmp|inlined.0 + end + local.get $vl|5 + i32.load8_u + local.set $a + local.get $vr|6 + i32.load8_u + local.set $b + local.get $a + local.get $b + i32.ne + if + local.get $a + local.get $b + i32.sub + br $~lib/util/memory/memcmp|inlined.0 + end + local.get $n|7 + i32.const 1 + i32.sub + local.set $n|7 + local.get $vl|5 + i32.const 1 + i32.add + local.set $vl|5 + local.get $vr|6 + i32.const 1 + i32.add + local.set $vr|6 + br $while-continue|0 + end + end + block $while-break|1 + loop $while-continue|1 + local.get $n|7 + i32.const 8 + i32.ge_u + if + local.get $vl|5 + i64.load + local.get $vr|6 + i64.load + i64.ne + if + br $while-break|1 + end + local.get $vl|5 + i32.const 8 + i32.add + local.set $vl|5 + local.get $vr|6 + i32.const 8 + i32.add + local.set $vr|6 + local.get $n|7 + i32.const 8 + i32.sub + local.set $n|7 + br $while-continue|1 + end + end + end + end + loop $while-continue|2 + local.get $n|7 + local.tee $10 + i32.const 1 + i32.sub + local.set $n|7 + local.get $10 + if + local.get $vl|5 + i32.load8_u + local.set $a|11 + local.get $vr|6 + i32.load8_u + local.set $b|12 + local.get $a|11 + local.get $b|12 + i32.ne + if + local.get $a|11 + local.get $b|12 + i32.sub + br $~lib/util/memory/memcmp|inlined.0 + end + local.get $vl|5 + i32.const 1 + i32.add + local.set $vl|5 + local.get $vr|6 + i32.const 1 + i32.add + local.set $vr|6 + br $while-continue|2 + end + end + i32.const 0 + br $~lib/util/memory/memcmp|inlined.0 + end + br $~lib/memory/memory.compare|inlined.0 + end + i32.const 0 + i32.eq + local.set $13 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $13 + return + ) + (func $~lib/byteslice/ByteSlice#copyTo (param $this i32) (param $dst i32) (param $dstOff i32) (param $srcOff i32) (param $count i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $count + i32.const 31 + i32.shr_u + local.get $srcOff + i32.const 31 + i32.shr_u + i32.or + local.get $srcOff + local.get $count + i32.add + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + local.get $dstOff + i32.const 31 + i32.shr_u + i32.or + local.get $dstOff + local.get $count + i32.add + local.get $dst + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 143 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + local.get $dst + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $dstOff + i32.add + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $srcOff + i32.add + local.get $count + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/byteslice/ByteSlice#copyTo@varargs (param $this i32) (param $dst i32) (param $dstOff i32) (param $srcOff i32) (param $count i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $3of3 + block $2of3 + block $1of3 + block $0of3 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of3 $1of3 $2of3 $3of3 $outOfRange + end + unreachable + end + i32.const 0 + local.set $dstOff + end + i32.const 0 + local.set $srcOff + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/byteslice/ByteSlice#get:length + local.get $srcOff + i32.sub + local.set $count + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $dst + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $dstOff + local.get $srcOff + local.get $count + call $~lib/byteslice/ByteSlice#copyTo + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/byteslice/ByteSlice#toPointer (param $this i32) (result i32) + (local $this|1 i32) + (local $offset i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $~lib/pointer/Pointer#constructor|inlined.0 (result i32) + i32.const 0 + local.set $this|1 + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/byteslice/ByteSlice#get:ptr + local.set $offset + local.get $offset + br $~lib/pointer/Pointer#constructor|inlined.0 + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $start:std/byteslice + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i64) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i64) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i64) + (local $54 i32) + (local $55 i32) + (local $56 i32) + (local $57 i32) + (local $58 i64) + (local $59 i32) + (local $60 i32) + (local $61 i32) + (local $62 i32) + (local $63 i32) + (local $64 i32) + (local $65 i32) + (local $66 i32) + (local $67 i32) + (local $68 i32) + (local $69 i32) + (local $70 i32) + (local $71 i32) + (local $72 i32) + (local $73 i32) + (local $74 i32) + (local $75 i32) + (local $76 i32) + (local $77 i32) + global.get $~lib/memory/__stack_pointer + i32.const 104 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 104 + memory.fill + global.get $std/byteslice/BASE + i32.const 1 + i32.store8 + global.get $std/byteslice/BASE + i32.const 1 + i32.add + i32.const 2 + i32.store8 + global.get $std/byteslice/BASE + i32.const 2 + i32.add + i32.const 3 + i32.store8 + global.get $std/byteslice/BASE + i32.const 3 + i32.add + i32.const 4 + i32.store8 + global.get $std/byteslice/BASE + i32.const 4 + i32.add + i32.const 5 + i32.store8 + global.get $std/byteslice/BASE + i32.const 5 + i32.add + i32.const 6 + i32.store8 + global.get $std/byteslice/BASE + i32.const 6 + i32.add + i32.const 7 + i32.store8 + global.get $std/byteslice/BASE + i32.const 7 + i32.add + i32.const 8 + i32.store8 + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 256 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 288 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 432 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 0 + global.get $std/byteslice/BASE + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/s + block $~lib/byteslice/ByteSlice#getU8|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store + i32.const 0 + local.set $1 + local.get $1 + local.get $0 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $1 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.0 + end + i32.const 255 + i32.and + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU8|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $2 + i32.store offset=8 + i32.const 1 + local.set $3 + local.get $3 + local.get $2 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $3 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.1 + end + i32.const 255 + i32.and + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/s + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 0 + call $~lib/byteslice/ByteSlice#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/s + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 1 + call $~lib/byteslice/ByteSlice#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU16|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $4 + i32.store offset=12 + i32.const 0 + local.set $5 + i32.const 1 + local.set $6 + local.get $5 + i32.const 31 + i32.shr_u + local.get $5 + i32.const 2 + i32.add + local.get $4 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 28 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $5 + i32.add + i32.load16_u + local.set $7 + local.get $6 + if (result i32) + local.get $7 + call $~lib/polyfills/bswap + else + local.get $7 + end + br $~lib/byteslice/ByteSlice#getU16|inlined.0 + end + i32.const 65535 + i32.and + i32.const 258 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU16|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $8 + i32.store offset=16 + i32.const 0 + local.set $9 + i32.const 0 + local.set $10 + local.get $9 + i32.const 31 + i32.shr_u + local.get $9 + i32.const 2 + i32.add + local.get $8 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 28 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $8 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $9 + i32.add + i32.load16_u + local.set $11 + local.get $10 + if (result i32) + local.get $11 + call $~lib/polyfills/bswap + else + local.get $11 + end + br $~lib/byteslice/ByteSlice#getU16|inlined.1 + end + i32.const 65535 + i32.and + i32.const 513 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU32|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $12 + i32.store offset=20 + i32.const 0 + local.set $13 + i32.const 1 + local.set $14 + local.get $13 + i32.const 31 + i32.shr_u + local.get $13 + i32.const 4 + i32.add + local.get $12 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 34 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $12 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $13 + i32.add + i32.load + local.set $15 + local.get $14 + if (result i32) + local.get $15 + call $~lib/polyfills/bswap + else + local.get $15 + end + br $~lib/byteslice/ByteSlice#getU32|inlined.0 + end + i32.const 16909060 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU32|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $16 + i32.store offset=24 + i32.const 0 + local.set $17 + i32.const 0 + local.set $18 + local.get $17 + i32.const 31 + i32.shr_u + local.get $17 + i32.const 4 + i32.add + local.get $16 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 34 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $16 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $17 + i32.add + i32.load + local.set $19 + local.get $18 + if (result i32) + local.get $19 + call $~lib/polyfills/bswap + else + local.get $19 + end + br $~lib/byteslice/ByteSlice#getU32|inlined.1 + end + i32.const 67305985 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU64|inlined.0 (result i64) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $20 + i32.store offset=28 + i32.const 0 + local.set $21 + i32.const 1 + local.set $22 + local.get $21 + i32.const 31 + i32.shr_u + local.get $21 + i32.const 8 + i32.add + local.get $20 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 40 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $20 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $21 + i32.add + i64.load + local.set $23 + local.get $22 + if (result i64) + local.get $23 + call $~lib/polyfills/bswap + else + local.get $23 + end + br $~lib/byteslice/ByteSlice#getU64|inlined.0 + end + i64.const 72623859790382856 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 39 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU64|inlined.1 (result i64) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $24 + i32.store offset=32 + i32.const 0 + local.set $25 + i32.const 0 + local.set $26 + local.get $25 + i32.const 31 + i32.shr_u + local.get $25 + i32.const 8 + i32.add + local.get $24 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 40 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $24 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $25 + i32.add + i64.load + local.set $27 + local.get $26 + if (result i64) + local.get $27 + call $~lib/polyfills/bswap + else + local.get $27 + end + br $~lib/byteslice/ByteSlice#getU64|inlined.1 + end + i64.const 578437695752307201 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getI8|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $28 + i32.store offset=36 + i32.const 0 + local.set $29 + local.get $29 + local.get $28 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 48 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $28 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $29 + i32.add + i32.load8_s + br $~lib/byteslice/ByteSlice#getI8|inlined.0 + end + i32.extend8_s + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 44 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $std/byteslice/WBASE + i32.const 32 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/w + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $30 + i32.store offset=40 + i32.const 0 + local.set $31 + i32.const 170 + local.set $32 + local.get $31 + local.get $30 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 73 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $30 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $31 + i32.add + local.get $32 + i32.store8 + block $~lib/byteslice/ByteSlice#getU8|inlined.2 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $33 + i32.store offset=44 + i32.const 0 + local.set $34 + local.get $34 + local.get $33 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $33 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $34 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.2 + end + i32.const 255 + i32.and + i32.const 170 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 51 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $35 + i32.store offset=48 + i32.const 2 + local.set $36 + i32.const 258 + local.set $37 + i32.const 1 + local.set $38 + local.get $36 + i32.const 31 + i32.shr_u + local.get $36 + i32.const 2 + i32.add + local.get $35 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 78 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $35 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $36 + i32.add + local.get $38 + if (result i32) + local.get $37 + call $~lib/polyfills/bswap + else + local.get $37 + end + i32.store16 + block $~lib/byteslice/ByteSlice#getU16|inlined.2 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $39 + i32.store offset=52 + i32.const 2 + local.set $40 + i32.const 1 + local.set $41 + local.get $40 + i32.const 31 + i32.shr_u + local.get $40 + i32.const 2 + i32.add + local.get $39 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 28 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $39 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $40 + i32.add + i32.load16_u + local.set $42 + local.get $41 + if (result i32) + local.get $42 + call $~lib/polyfills/bswap + else + local.get $42 + end + br $~lib/byteslice/ByteSlice#getU16|inlined.2 + end + i32.const 65535 + i32.and + i32.const 258 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/WBASE + i32.const 2 + i32.add + i32.load16_u + i32.const 513 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 55 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $43 + i32.store offset=56 + i32.const 4 + local.set $44 + i32.const 16909060 + local.set $45 + i32.const 1 + local.set $46 + local.get $44 + i32.const 31 + i32.shr_u + local.get $44 + i32.const 4 + i32.add + local.get $43 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 83 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $43 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $44 + i32.add + local.get $46 + if (result i32) + local.get $45 + call $~lib/polyfills/bswap + else + local.get $45 + end + i32.store + block $~lib/byteslice/ByteSlice#getU32|inlined.2 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $47 + i32.store offset=60 + i32.const 4 + local.set $48 + i32.const 1 + local.set $49 + local.get $48 + i32.const 31 + i32.shr_u + local.get $48 + i32.const 4 + i32.add + local.get $47 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 34 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $47 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $48 + i32.add + i32.load + local.set $50 + local.get $49 + if (result i32) + local.get $50 + call $~lib/polyfills/bswap + else + local.get $50 + end + br $~lib/byteslice/ByteSlice#getU32|inlined.2 + end + i32.const 16909060 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $51 + i32.store offset=64 + i32.const 8 + local.set $52 + i64.const 72623859790382856 + local.set $53 + i32.const 1 + local.set $54 + local.get $52 + i32.const 31 + i32.shr_u + local.get $52 + i32.const 8 + i32.add + local.get $51 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 88 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $51 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $52 + i32.add + local.get $54 + if (result i64) + local.get $53 + call $~lib/polyfills/bswap + else + local.get $53 + end + i64.store + block $~lib/byteslice/ByteSlice#getU64|inlined.2 (result i64) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $55 + i32.store offset=68 + i32.const 8 + local.set $56 + i32.const 1 + local.set $57 + local.get $56 + i32.const 31 + i32.shr_u + local.get $56 + i32.const 8 + i32.add + local.get $55 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 40 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $55 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $56 + i32.add + i64.load + local.set $58 + local.get $57 + if (result i64) + local.get $58 + call $~lib/polyfills/bswap + else + local.get $58 + end + br $~lib/byteslice/ByteSlice#getU64|inlined.2 + end + i64.const 72623859790382856 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 61 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $59 + i32.store offset=72 + i32.const 16 + local.set $60 + i32.const -1430532899 + local.set $61 + i32.const 0 + local.set $62 + local.get $60 + i32.const 31 + i32.shr_u + local.get $60 + i32.const 4 + i32.add + local.get $59 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.gt_s + i32.or + if + i32.const 336 + i32.const 80 + i32.const 83 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + local.get $59 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $60 + i32.add + local.get $62 + if (result i32) + local.get $61 + call $~lib/polyfills/bswap + else + local.get $61 + end + i32.store + global.get $std/byteslice/WBASE + i32.const 16 + i32.add + i32.load + i32.const -1430532899 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 65 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/w + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 0 + i32.const 187 + call $~lib/byteslice/ByteSlice#__set + global.get $std/byteslice/w + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 0 + call $~lib/byteslice/ByteSlice#__get + i32.const 187 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/s + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 2 + i32.const 6 + call $~lib/byteslice/ByteSlice#slice + global.set $std/byteslice/sub + global.get $std/byteslice/sub + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU8|inlined.3 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/sub + local.tee $63 + i32.store offset=76 + i32.const 0 + local.set $64 + local.get $64 + local.get $63 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $63 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $64 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.3 + end + i32.const 255 + i32.and + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU8|inlined.4 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/sub + local.tee $65 + i32.store offset=80 + i32.const 3 + local.set $66 + local.get $66 + local.get $65 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $65 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $66 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.4 + end + i32.const 255 + i32.and + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 75 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $std/byteslice/FBASE + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/f + global.get $std/byteslice/f + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 255 + i32.const 0 + i32.const 8 + call $~lib/byteslice/ByteSlice#fill + block $~lib/byteslice/ByteSlice#getU8|inlined.5 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/f + local.tee $67 + i32.store offset=84 + i32.const 0 + local.set $68 + local.get $68 + local.get $67 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $67 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $68 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.5 + end + i32.const 255 + i32.and + i32.const 255 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 81 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU8|inlined.6 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/f + local.tee $69 + i32.store offset=88 + i32.const 7 + local.set $70 + local.get $70 + local.get $69 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $69 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $70 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.6 + end + i32.const 255 + i32.and + i32.const 255 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 82 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $std/byteslice/BASE + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/a + i32.const 0 + global.get $std/byteslice/BASE + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/b + global.get $std/byteslice/a + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + global.get $std/byteslice/b + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=92 + local.get $77 + call $~lib/byteslice/ByteSlice#equals + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 87 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/CBASE + global.get $std/byteslice/BASE + i32.const 4 + memory.copy + i32.const 0 + global.get $std/byteslice/CBASE + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/c + global.get $std/byteslice/a + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + global.get $std/byteslice/c + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=92 + local.get $77 + call $~lib/byteslice/ByteSlice#equals + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/CBASE + i32.const 255 + i32.store8 + i32.const 0 + global.get $std/byteslice/CBASE + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/d + global.get $std/byteslice/a + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + global.get $std/byteslice/d + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=92 + local.get $77 + call $~lib/byteslice/ByteSlice#equals + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 98 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $std/byteslice/BASE + i32.const 8 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/src + i32.const 0 + global.get $std/byteslice/DBASE + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/dst + global.get $std/byteslice/dst + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + i32.const 0 + i32.const 0 + i32.const 16 + call $~lib/byteslice/ByteSlice#fill + global.get $std/byteslice/src + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + global.get $std/byteslice/dst + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=92 + local.get $77 + i32.const 0 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/byteslice/ByteSlice#copyTo@varargs + block $~lib/byteslice/ByteSlice#getU8|inlined.7 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $71 + i32.store offset=96 + i32.const 0 + local.set $72 + local.get $72 + local.get $71 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $71 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $72 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.7 + end + i32.const 255 + i32.and + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 106 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/byteslice/ByteSlice#getU8|inlined.8 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $73 + i32.store offset=100 + i32.const 7 + local.set $74 + local.get $74 + local.get $73 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:length + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $73 + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#get:ptr + local.get $74 + i32.add + i32.load8_u + br $~lib/byteslice/ByteSlice#getU8|inlined.8 + end + i32.const 255 + i32.and + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 107 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/s + local.set $77 + global.get $~lib/memory/__stack_pointer + local.get $77 + i32.store offset=4 + local.get $77 + call $~lib/byteslice/ByteSlice#toPointer + global.set $std/byteslice/p + block $~lib/pointer/Pointer#get:offset|inlined.0 (result i32) + global.get $std/byteslice/p + local.set $75 + local.get $75 + br $~lib/pointer/Pointer#get:offset|inlined.0 + end + global.get $std/byteslice/BASE + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 111 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.0 (result i32) + global.get $std/byteslice/p + local.set $76 + i32.const 0 + drop + local.get $76 + i32.load8_u + br $~lib/pointer/Pointer#get:value|inlined.0 + end + i32.const 255 + i32.and + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 104 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/byteslice/s + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/w + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/sub + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/f + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/b + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/d + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/src + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/dst + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/byteslice/ByteSlice#__visit (param $this i32) (param $_cookie i32) + ) + (func $~lib/byteslice/ByteSlice~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/byteslice/ByteSlice#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/byteslice/ByteSlice + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/byteslice/ByteSlice $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/byteslice/ByteSlice~visit + return + end + unreachable + ) +) diff --git a/tests/compiler/std/byteslice.json b/tests/compiler/std/byteslice.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/byteslice.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/byteslice.release.wat b/tests/compiler/std/byteslice.release.wat new file mode 100644 index 0000000000..87864eb346 --- /dev/null +++ b/tests/compiler/std/byteslice.release.wat @@ -0,0 +1,3200 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32) (result i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (result i32))) + (type $6 (func (param i32) (result i32))) + (type $7 (func (param i32 i32 i64))) + (type $8 (func (param i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $std/byteslice/s (mut i32) (i32.const 0)) + (global $std/byteslice/w (mut i32) (i32.const 0)) + (global $std/byteslice/sub (mut i32) (i32.const 0)) + (global $std/byteslice/f (mut i32) (i32.const 0)) + (global $std/byteslice/a (mut i32) (i32.const 0)) + (global $std/byteslice/b (mut i32) (i32.const 0)) + (global $std/byteslice/c (mut i32) (i32.const 0)) + (global $std/byteslice/d (mut i32) (i32.const 0)) + (global $std/byteslice/src (mut i32) (i32.const 0)) + (global $std/byteslice/dst (mut i32) (i32.const 0)) + (global $std/byteslice/p (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34408)) + (memory $0 1) + (data $0 (i32.const 1036) ",") + (data $0.1 (i32.const 1048) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $1 (i32.const 1084) "<") + (data $1.1 (i32.const 1096) "\02\00\00\00\"\00\00\00~\00l\00i\00b\00/\00b\00y\00t\00e\00s\00l\00i\00c\00e\00.\00t\00s") + (data $2 (i32.const 1148) "<") + (data $2.1 (i32.const 1160) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $3 (i32.const 1212) "<") + (data $3.1 (i32.const 1224) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $6 (i32.const 1340) "<") + (data $6.1 (i32.const 1352) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $7 (i32.const 1404) ",") + (data $7.1 (i32.const 1416) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $9 (i32.const 1484) "<") + (data $9.1 (i32.const 1496) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $10 (i32.const 1548) "<") + (data $10.1 (i32.const 1560) "\02\00\00\00 \00\00\00s\00t\00d\00/\00b\00y\00t\00e\00s\00l\00i\00c\00e\00.\00t\00s") + (data $11 (i32.const 1616) "\05\00\00\00 \00\00\00 \00\00\00 ") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + if + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $1 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $1 + i32.load offset=8 + local.tee $0 + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $0 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$210 + local.get $1 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $0 + i32.eqz + if + local.get $1 + i32.load offset=8 + i32.eqz + local.get $1 + i32.const 34408 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$210 + end + local.get $1 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $0 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $1 + i32.load offset=12 + local.tee $0 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $0 + i32.const 1616 + i32.load + i32.gt_u + if + i32.const 1360 + i32.const 1424 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + i32.shl + i32.const 1620 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $0 + local.get $1 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/byteslice/ByteSlice#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + if + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1056 + i32.const 1104 + i32.const 15 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1504 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $invalid + block $~lib/byteslice/ByteSlice + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/byteslice/ByteSlice $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + return + end + unreachable + ) + (func $~lib/byteslice/ByteSlice#equals (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + if + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + i32.ne + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $1 + i32.const 0 + local.set $0 + block $~lib/util/memory/memcmp|inlined.0 + local.get $2 + local.get $3 + i32.eq + br_if $~lib/util/memory/memcmp|inlined.0 + local.get $2 + i32.const 7 + i32.and + local.get $3 + i32.const 7 + i32.and + i32.eq + if + loop $while-continue|0 + local.get $2 + i32.const 7 + i32.and + if + i32.const 0 + local.set $0 + local.get $1 + i32.eqz + br_if $~lib/util/memory/memcmp|inlined.0 + local.get $2 + i32.load8_u + local.tee $4 + local.get $3 + i32.load8_u + local.tee $5 + i32.sub + local.set $0 + local.get $4 + local.get $5 + i32.ne + br_if $~lib/util/memory/memcmp|inlined.0 + local.get $1 + i32.const 1 + i32.sub + local.set $1 + local.get $2 + i32.const 1 + i32.add + local.set $2 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $while-continue|0 + end + end + loop $while-continue|1 + local.get $1 + i32.const 8 + i32.ge_u + if + local.get $2 + i64.load + local.get $3 + i64.load + i64.eq + if + local.get $2 + i32.const 8 + i32.add + local.set $2 + local.get $3 + i32.const 8 + i32.add + local.set $3 + local.get $1 + i32.const 8 + i32.sub + local.set $1 + br $while-continue|1 + end + end + end + end + loop $while-continue|2 + local.get $1 + local.tee $0 + i32.const 1 + i32.sub + local.set $1 + local.get $0 + if + local.get $2 + i32.load8_u + local.tee $4 + local.get $3 + i32.load8_u + local.tee $5 + i32.sub + local.set $0 + local.get $4 + local.get $5 + i32.ne + br_if $~lib/util/memory/memcmp|inlined.0 + local.get $2 + i32.const 1 + i32.add + local.set $2 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $while-continue|2 + end + end + i32.const 0 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.eqz + ) + (func $~lib/byteslice/ByteSlice#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + if + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=4 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 117 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load + i32.add + i32.load8_u + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=4 + i32.const -2 + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -2 + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34416 + i32.const 0 + i32.store + i32.const 35984 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34416 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34416 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34416 + i32.const 35988 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 34416 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1504 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1504 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + global.get $std/byteslice/s + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/w + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/sub + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/f + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/a + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/b + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/c + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/d + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/src + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/byteslice/dst + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 1360 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + i32.const 1168 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1232 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/byteslice/ByteSlice#fill (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + if + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.tee $3 + i32.const 0 + local.get $3 + i32.const 0 + i32.le_s + select + local.tee $4 + local.get $2 + i32.const 0 + i32.lt_s + if + local.get $2 + local.get $3 + i32.add + local.tee $2 + i32.const 0 + local.get $2 + i32.const 0 + i32.gt_s + select + local.set $2 + end + local.get $2 + local.get $3 + local.get $2 + local.get $3 + i32.lt_s + select + local.tee $2 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $4 + local.get $0 + i32.load + i32.add + local.get $1 + local.get $2 + local.get $4 + i32.sub + memory.fill + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:std/byteslice + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34408 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1232 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34408 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34408 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1504 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/rt/itcms/__new (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $0 + loop $do-loop|0 + local.get $0 + call $~lib/rt/itcms/step + i32.sub + local.set $0 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $0 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.tee $1 + call $~lib/rt/tlsf/searchBlock + local.tee $0 + i32.eqz + if + i32.const 4 + local.get $1 + i32.load offset=1568 + memory.size + local.tee $0 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.const 65563 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $2 + local.get $0 + local.get $2 + local.get $0 + local.get $2 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $2 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $1 + local.get $0 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $1 + call $~lib/rt/tlsf/searchBlock + local.tee $0 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 28 + i32.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $0 + call $~lib/rt/tlsf/removeBlock + local.get $0 + i32.load + local.tee $2 + i32.const -4 + i32.and + i32.const 28 + i32.sub + local.tee $3 + i32.const 16 + i32.ge_u + if + local.get $0 + local.get $2 + i32.const 2 + i32.and + i32.const 28 + i32.or + i32.store + local.get $0 + i32.const 32 + i32.add + local.tee $2 + local.get $3 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $1 + local.get $2 + call $~lib/rt/tlsf/insertBlock + else + local.get $0 + local.get $2 + i32.const -2 + i32.and + i32.store + local.get $0 + i32.const 4 + i32.add + local.get $0 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $1 + local.get $1 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $0 + i32.const 4 + i32.store offset=12 + local.get $0 + i32.const 8 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $2 + local.get $0 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $0 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 20 + i32.add + local.tee $0 + i64.const 0 + i64.store align=1 + local.get $0 + ) + (func $start:std/byteslice + (local $0 i32) + (local $1 i64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 104 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner5 + block $folding-inner4 + block $folding-inner3 + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 104 + memory.fill + i32.const 8192 + i32.const 1 + i32.store8 + i32.const 8193 + i32.const 2 + i32.store8 + i32.const 8194 + i32.const 3 + i32.store8 + i32.const 8195 + i32.const 4 + i32.store8 + i32.const 8196 + i32.const 5 + i32.store8 + i32.const 8197 + i32.const 6 + i32.store8 + i32.const 8198 + i32.const 7 + i32.store8 + i32.const 8199 + i32.const 8 + i32.store8 + memory.size + i32.const 16 + i32.shl + i32.const 34408 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1284 + i32.const 1280 + i32.store + i32.const 1288 + i32.const 1280 + i32.store + i32.const 1280 + global.set $~lib/rt/itcms/pinSpace + i32.const 1316 + i32.const 1312 + i32.store + i32.const 1320 + i32.const 1312 + i32.store + i32.const 1312 + global.set $~lib/rt/itcms/toSpace + i32.const 1460 + i32.const 1456 + i32.store + i32.const 1464 + i32.const 1456 + i32.store + i32.const 1456 + global.set $~lib/rt/itcms/fromSpace + i32.const 8192 + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/s + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.le_u + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u offset=1 + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 22 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/byteslice/ByteSlice#__get + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=4 + local.get $0 + i32.const 1 + call $~lib/byteslice/ByteSlice#__get + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 2 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load16_u + local.tee $0 + i32.const 8 + i32.shl + local.get $0 + i32.const 8 + i32.shr_u + i32.or + i32.const 65535 + i32.and + i32.const 258 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 2 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load16_u + i32.const 513 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load + local.tee $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + i32.const 16909060 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load + i32.const 67305985 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=28 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 8 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i64.load + local.tee $1 + i64.const 8 + i64.shr_u + i64.const 71777214294589695 + i64.and + local.get $1 + i64.const 71777214294589695 + i64.and + i64.const 8 + i64.shl + i64.or + local.tee $1 + i64.const 16 + i64.shr_u + i64.const 281470681808895 + i64.and + local.get $1 + i64.const 281470681808895 + i64.and + i64.const 16 + i64.shl + i64.or + i64.const 32 + i64.rotr + i64.const 72623859790382856 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 39 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 8 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i64.load + i64.const 578437695752307201 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 48 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 44 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8448 + i32.const 32 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/w + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 73 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.const 170 + i32.store8 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=44 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 170 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 51 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=48 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.lt_s + if + i32.const 1360 + i32.const 1104 + i32.const 78 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.const 513 + i32.store16 offset=2 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=52 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load16_u offset=2 + local.tee $0 + i32.const 8 + i32.shl + local.get $0 + i32.const 8 + i32.shr_u + i32.or + i32.const 65535 + i32.and + i32.const 258 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8450 + i32.load16_u + i32.const 513 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 55 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=56 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 8 + i32.lt_s + br_if $folding-inner5 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.const 67305985 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=60 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 8 + i32.lt_s + br_if $folding-inner3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load offset=4 + local.tee $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + i32.const 16909060 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=64 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 16 + i32.lt_s + if + i32.const 1360 + i32.const 1104 + i32.const 88 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i64.const 578437695752307201 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=68 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 16 + i32.lt_s + br_if $folding-inner4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i64.load offset=8 + local.tee $1 + i64.const 8 + i64.shr_u + i64.const 71777214294589695 + i64.and + local.get $1 + i64.const 71777214294589695 + i64.and + i64.const 8 + i64.shl + i64.or + local.tee $1 + i64.const 16 + i64.shr_u + i64.const 281470681808895 + i64.and + local.get $1 + i64.const 281470681808895 + i64.and + i64.const 16 + i64.shl + i64.or + i64.const 32 + i64.rotr + i64.const 72623859790382856 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 61 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=72 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 20 + i32.lt_s + br_if $folding-inner5 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.const -1430532899 + i32.store offset=16 + i32.const 8464 + i32.load + i32.const -1430532899 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 65 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 122 + i32.const 41 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + i32.const 187 + i32.store8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/w + local.tee $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/byteslice/ByteSlice#__get + i32.const 187 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + i32.const 6 + local.get $2 + local.get $2 + i32.const 6 + i32.gt_s + select + i32.const 2 + local.get $2 + local.get $2 + i32.const 2 + i32.gt_s + select + local.tee $2 + i32.sub + local.set $3 + local.get $2 + local.get $0 + i32.load + i32.add + local.get $3 + i32.const 0 + local.get $3 + i32.const 0 + i32.gt_s + select + call $~lib/byteslice/ByteSlice#constructor + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.set $std/byteslice/sub + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/sub + local.tee $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/sub + local.tee $0 + i32.store offset=76 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/sub + local.tee $0 + i32.store offset=80 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.le_u + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u offset=3 + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 75 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8704 + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/f + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/f + local.tee $0 + i32.store offset=4 + local.get $0 + i32.const 255 + i32.const 8 + call $~lib/byteslice/ByteSlice#fill + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/f + local.tee $0 + i32.store offset=84 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 255 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 81 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/f + local.tee $0 + i32.store offset=88 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 7 + i32.le_u + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u offset=7 + i32.const 255 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 82 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8192 + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/a + i32.const 8192 + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/b + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/a + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/b + local.tee $2 + i32.store offset=92 + local.get $0 + local.get $2 + call $~lib/byteslice/ByteSlice#equals + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 87 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8960 + i32.const 8192 + i32.load align=1 + i32.store align=1 + i32.const 8960 + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/c + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/a + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/c + local.tee $2 + i32.store offset=92 + local.get $0 + local.get $2 + call $~lib/byteslice/ByteSlice#equals + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8960 + i32.const 255 + i32.store8 + i32.const 8960 + i32.const 4 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/d + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/a + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/d + local.tee $2 + i32.store offset=92 + local.get $0 + local.get $2 + call $~lib/byteslice/ByteSlice#equals + if + i32.const 0 + i32.const 1568 + i32.const 98 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 8192 + i32.const 8 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/src + i32.const 9216 + i32.const 16 + call $~lib/byteslice/ByteSlice#constructor + global.set $std/byteslice/dst + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.const 16 + call $~lib/byteslice/ByteSlice#fill + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/src + local.tee $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $3 + i32.store offset=92 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $0 + i32.const 31 + i32.shr_u + local.get $2 + i32.load offset=4 + local.get $0 + i32.lt_s + i32.or + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.load offset=4 + local.get $0 + i32.lt_s + i32.or + if + i32.const 1360 + i32.const 1104 + i32.const 143 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.get $0 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $0 + i32.store offset=96 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.eqz + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 106 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/dst + local.tee $0 + i32.store offset=100 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 7 + i32.le_u + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + i32.load8_u offset=7 + i32.const 8 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 107 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/byteslice/s + local.tee $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1640 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.set $std/byteslice/p + global.get $std/byteslice/p + i32.const 8192 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 111 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/byteslice/p + i32.load8_u + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 104 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34432 + i32.const 34480 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + i32.const 1104 + i32.const 23 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + i32.const 1104 + i32.const 28 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + i32.const 1104 + i32.const 34 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + i32.const 1104 + i32.const 40 + i32.const 58 + call $~lib/builtins/abort + unreachable + end + i32.const 1360 + i32.const 1104 + i32.const 83 + i32.const 58 + call $~lib/builtins/abort + unreachable + ) +) diff --git a/tests/compiler/std/byteslice.ts b/tests/compiler/std/byteslice.ts new file mode 100644 index 0000000000..c4089f4504 --- /dev/null +++ b/tests/compiler/std/byteslice.ts @@ -0,0 +1,112 @@ +import { ByteSlice } from "byteslice"; + +// Use high addresses to avoid overlap with heap/static data +const BASE: usize = 8192; + +// --- Basic read/write --- + +// Write some data to memory for testing +store(BASE, 0x01); +store(BASE + 1, 0x02); +store(BASE + 2, 0x03); +store(BASE + 3, 0x04); +store(BASE + 4, 0x05); +store(BASE + 5, 0x06); +store(BASE + 6, 0x07); +store(BASE + 7, 0x08); + +let s = new ByteSlice(BASE, 16); + +// Single-byte read +assert(s.getU8(0) == 0x01); +assert(s.getU8(1) == 0x02); + +// Byte indexing operators +assert(s[0] == 0x01); +assert(s[1] == 0x02); + +// 16-bit big-endian read (default) +assert(s.getU16(0) == 0x0102); +// 16-bit little-endian read +assert(s.getU16(0, false) == 0x0201); + +// 32-bit big-endian read (default) +assert(s.getU32(0) == 0x01020304); +// 32-bit little-endian read +assert(s.getU32(0, false) == 0x04030201); + +// 64-bit big-endian read (default) +assert(s.getU64(0) == 0x0102030405060708); +// 64-bit little-endian read +assert(s.getU64(0, false) == 0x0807060504030201); + +// Signed reads +assert(s.getI8(0) == 0x01); + +// --- Write tests --- +const WBASE: usize = BASE + 256; +let w = new ByteSlice(WBASE, 32); + +w.setU8(0, 0xAA); +assert(w.getU8(0) == 0xAA); + +w.setU16(2, 0x0102); // big-endian default +assert(w.getU16(2) == 0x0102); +assert(load(WBASE + 2) == 0x0201); // raw memory is byte-swapped + +w.setU32(4, 0x01020304); +assert(w.getU32(4) == 0x01020304); + +w.setU64(8, 0x0102030405060708); +assert(w.getU64(8) == 0x0102030405060708); + +// LE write +w.setU32(16, 0xAABBCCDD, false); +assert(load(WBASE + 16) == 0xAABBCCDD); // no swap + +// Byte indexing write +w[0] = 0xBB; +assert(w[0] == 0xBB); + +// --- Slice --- +let sub = s.slice(2, 6); +assert(sub.length == 4); +assert(sub.getU8(0) == 0x03); +assert(sub.getU8(3) == 0x06); + +// --- Fill --- +const FBASE: usize = BASE + 512; +let f = new ByteSlice(FBASE, 16); +f.fill(0xFF, 0, 8); +assert(f.getU8(0) == 0xFF); +assert(f.getU8(7) == 0xFF); + +// --- Equals --- +let a = new ByteSlice(BASE, 4); +let b = new ByteSlice(BASE, 4); +assert(a.equals(b) == true); + +// Copy data to a different location and compare +const CBASE: usize = BASE + 768; +memory.copy(CBASE, BASE, 4); +let c = new ByteSlice(CBASE, 4); +assert(a.equals(c) == true); + +// Modify one byte +store(CBASE, 0xFF); +let d = new ByteSlice(CBASE, 4); +assert(a.equals(d) == false); + +// --- CopyTo --- +const DBASE: usize = BASE + 1024; +let src = new ByteSlice(BASE, 8); +let dst = new ByteSlice(DBASE, 16); +dst.fill(0, 0, 16); +src.copyTo(dst); +assert(dst.getU8(0) == 0x01); +assert(dst.getU8(7) == 0x08); + +// --- toPointer --- +let p = s.toPointer(); +assert(p.offset == BASE); +assert(p.value == 0x01); diff --git a/tests/compiler/std/console.debug.wat b/tests/compiler/std/console.debug.wat index 2bd7371986..100ea5d5df 100644 --- a/tests/compiler/std/console.debug.wat +++ b/tests/compiler/std/console.debug.wat @@ -12,10 +12,11 @@ (import "env" "console.time" (func $~lib/bindings/dom/console.time (param i32))) (import "env" "console.timeLog" (func $~lib/bindings/dom/console.timeLog (param i32))) (import "env" "console.timeEnd" (func $~lib/bindings/dom/console.timeEnd (param i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__data_end i32 (i32.const 588)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33356)) (global $~lib/memory/__heap_base i32 (i32.const 33356)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0c\00\00\00w\00h\00o\00o\00p\00s\00") (data $1 (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\08\00\00\00p\00h\00e\00w\00\00\00\00\00") @@ -292,4 +293,36 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/console.release.wat b/tests/compiler/std/console.release.wat index e8c683571e..98fa2f07d1 100644 --- a/tests/compiler/std/console.release.wat +++ b/tests/compiler/std/console.release.wat @@ -1,9 +1,9 @@ (module (type $0 (func (param i32))) - (type $1 (func (param i32 i32))) - (type $2 (func (param i32 i32 i32 i32))) - (type $3 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "console.warn" (func $~lib/bindings/dom/console.warn (param i32))) (import "env" "console.timeLog" (func $~lib/bindings/dom/console.timeLog (param i32))) (import "env" "console.timeEnd" (func $~lib/bindings/dom/console.timeEnd (param i32))) @@ -45,22 +45,43 @@ (data $13.1 (i32.const 1592) "\02\00\00\00\08\00\00\001\002\003\004") (export "memory" (memory $0)) (start $~start) - (func $~lib/console/console.log (param $0 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer + (func $~stack_check global.get $~lib/memory/__stack_pointer i32.const 1612 i32.lt_s if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 34400 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 34448 + i32.store offset=4 i32.const 34400 i32.const 34448 i32.const 1 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer unreachable end + ) + (func $~lib/console/console.log (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -79,17 +100,7 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - if - i32.const 34400 - i32.const 34448 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -108,17 +119,7 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - if - i32.const 34400 - i32.const 34448 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -137,17 +138,7 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - if - i32.const 34400 - i32.const 34448 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -166,17 +157,7 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - if - i32.const 34400 - i32.const 34448 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 i32.store @@ -206,112 +187,91 @@ i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1168 - i32.store - i32.const 1168 - call $~lib/bindings/dom/console.debug - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1216 - i32.store - i32.const 1216 - call $~lib/bindings/dom/console.info - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1264 - i32.store - i32.const 1264 - call $~lib/bindings/dom/console.warn - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1612 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1312 - i32.store - i32.const 1312 - call $~lib/bindings/dom/console.error - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - i32.const 1360 - call $~lib/console/console.time - i32.const 1360 - call $~lib/console/console.timeLog - i32.const 1360 - call $~lib/console/console.timeEnd - i32.const 1408 - call $~lib/console/console.timeLog - i32.const 1408 - call $~lib/console/console.timeEnd - i32.const 1456 - call $~lib/console/console.time - i32.const 1456 - call $~lib/console/console.time - i32.const 1504 - call $~lib/console/console.log - i32.const 1536 - call $~lib/console/console.log - i32.const 1568 - call $~lib/console/console.log - i32.const 1600 - call $~lib/console/console.log - return - end - i32.const 34400 - i32.const 34448 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1168 + i32.store + i32.const 1168 + call $~lib/bindings/dom/console.debug + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1216 + i32.store + i32.const 1216 + call $~lib/bindings/dom/console.info + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1264 + i32.store + i32.const 1264 + call $~lib/bindings/dom/console.warn + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1312 + i32.store + i32.const 1312 + call $~lib/bindings/dom/console.error + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1360 + call $~lib/console/console.time + i32.const 1360 + call $~lib/console/console.timeLog + i32.const 1360 + call $~lib/console/console.timeEnd + i32.const 1408 + call $~lib/console/console.timeLog + i32.const 1408 + call $~lib/console/console.timeEnd + i32.const 1456 + call $~lib/console/console.time + i32.const 1456 + call $~lib/console/console.time + i32.const 1504 + call $~lib/console/console.log + i32.const 1536 + call $~lib/console/console.log + i32.const 1568 + call $~lib/console/console.log + i32.const 1600 + call $~lib/console/console.log ) ) diff --git a/tests/compiler/std/dataview.debug.wat b/tests/compiler/std/dataview.debug.wat index ad44b4a321..d85d8f7493 100644 --- a/tests/compiler/std/dataview.debug.wat +++ b/tests/compiler/std/dataview.debug.wat @@ -2,10 +2,10 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32))) (type $2 (func (param i32))) - (type $3 (func (param i32 i32 i32))) - (type $4 (func)) - (type $5 (func (param i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32))) + (type $5 (func)) + (type $6 (func (param i32 i32) (result i32))) (type $7 (func (param i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i32) (result i64))) @@ -17,10 +17,12 @@ (type $15 (func (param i32 i32 i32) (result f64))) (type $16 (func (param i32 i32 f32 i32))) (type $17 (func (param i32 i32 f64 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -240,7 +242,7 @@ if i32.const 336 i32.const 400 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2558,82 +2560,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 144 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/dataview/DataView - block $~lib/typedarray/Uint8Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Uint8Array $~lib/dataview/DataView $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/dataview/DataView~visit - return - end - unreachable - ) (func $~start call $start:std/dataview ) @@ -2650,6 +2576,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) (local $buffer i32) (local $4 i32) @@ -2823,7 +2781,7 @@ if i32.const 336 i32.const 544 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -6587,4 +6545,80 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/dataview/DataView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/dataview/DataView + block $~lib/typedarray/Uint8Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Uint8Array $~lib/dataview/DataView $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/dataview/DataView~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/std/dataview.release.wat b/tests/compiler/std/dataview.release.wat index f02332e163..02c9c2d27b 100644 --- a/tests/compiler/std/dataview.release.wat +++ b/tests/compiler/std/dataview.release.wat @@ -5,9 +5,9 @@ (type $3 (func)) (type $4 (func (param i32))) (type $5 (func (param i32 i32))) - (type $6 (func (param i32 i32) (result i64))) - (type $7 (func (param i32 i64 i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32) (result i64))) + (type $8 (func (param i32 i64 i32))) (type $9 (func (param i32 i32 i32) (result f32))) (type $10 (func (result i32))) (type $11 (func (param i32 i32) (result f64))) @@ -15,7 +15,7 @@ (type $13 (func (param i32 f64 i32))) (type $14 (func (param i32 f32 i32))) (type $15 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -51,6 +51,41 @@ (data $13 (i32.const 1744) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00A") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/dataview/DataView#getUint16 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -526,7 +561,7 @@ if i32.const 1360 i32.const 1568 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -1847,7 +1882,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$221 + block $__inlined_func$~lib/rt/itcms/Object#unlink$222 local.get $0 i32.load offset=4 i32.const -4 @@ -1871,7 +1906,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$221 + br $__inlined_func$~lib/rt/itcms/Object#unlink$222 end local.get $0 i32.load offset=8 @@ -1914,7 +1949,7 @@ if i32.const 1360 i32.const 1424 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index 69c2f16c5e..19b880b48e 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -22,7 +22,8 @@ (type $20 (func (param i32 i64) (result i32))) (type $21 (func (param i32 i64) (result i64))) (type $22 (func (param i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -36,13 +37,14 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) - (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/rt/__rtti_base i32 (i32.const 7408)) (global $~lib/memory/__data_end i32 (i32.const 7444)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 40212)) @@ -625,7 +627,7 @@ if i32.const 368 i32.const 432 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3355,6 +3357,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3656,157 +3662,6 @@ local.get $this i32.load offset=4 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 368 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 5760 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 5808 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 176 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1280 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2336 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - i32.const 1 - drop - local.get $this - local.set $cur - local.get $cur - local.get $this - i32.const 20 - i32.sub - call $~lib/rt/common/OBJECT#get:rtSize - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - ) - (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/array/Array<~lib/string/String> - block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/date/Date - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start global.get $~started if @@ -3829,6 +3684,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/date/Date#constructor (param $this i32) (param $epochMillis i64) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -7009,6 +6896,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -7049,7 +6940,7 @@ if i32.const 368 i32.const 5712 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -7087,6 +6978,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -7140,6 +7035,10 @@ i32.add local.get $value i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -7326,6 +7225,10 @@ i32.add local.get $charStr i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $result local.get $charStr i32.const 1 @@ -7663,7 +7566,7 @@ if i32.const 368 i32.const 5712 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -7693,7 +7596,7 @@ if i32.const 5808 i32.const 5712 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -13407,11 +13310,20 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) + (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) + (local $sign i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|8 i32) + (local $buffer|9 i32) + (local $num|10 i32) + (local $offset|11 i32) + (local $val32 i32) + (local $decimals|13 i32) + (local $14 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -13420,112 +13332,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:length_ - i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) - (local $sign i32) - (local $out i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|8 i32) - (local $buffer|9 i32) - (local $num|10 i32) - (local $offset|11 i32) - (local $val32 i32) - (local $decimals|13 i32) - (local $14 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $radix + local.get $radix i32.const 2 i32.lt_s if (result i32) @@ -13716,6 +13523,10 @@ local.get $array local.get $buffer i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $buffer i32.const 0 @@ -13738,4 +13549,263 @@ local.get $7 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 368 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 5760 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 5808 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 176 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1280 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2336 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $cur + local.get $cur + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array<~lib/string/String> + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/date/Date + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index b5fe4f437c..f17bcda0e2 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -5,8 +5,8 @@ (type $3 (func)) (type $4 (func (param i32))) (type $5 (func (param i32 i32 i32) (result i32))) - (type $6 (func (param i64) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i64) (result i32))) (type $8 (func (param i32 i32 i32))) (type $9 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $10 (func (param i32 i64))) @@ -14,7 +14,7 @@ (type $12 (func (param i32 i32 i32 i32) (result i32))) (type $13 (func (param i32 i32 i64))) (type $14 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -257,6 +257,41 @@ (data $117 (i32.const 8432) "\08\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00\04A\00\00\02A\00\00\02\t") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8468 + i32.lt_s + if + i32.const 41264 + i32.const 41312 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/date/Date#constructor (param $0 i64) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -607,7 +642,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store - block $__inlined_func$~lib/string/String#charCodeAt$386 + block $__inlined_func$~lib/string/String#charCodeAt$384 local.get $3 local.get $2 i32.const 20 @@ -623,7 +658,7 @@ global.set $~lib/memory/__stack_pointer i32.const -1 local.set $0 - br $__inlined_func$~lib/string/String#charCodeAt$386 + br $__inlined_func$~lib/string/String#charCodeAt$384 end local.get $2 local.get $3 @@ -895,7 +930,7 @@ global.get $~lib/memory/__stack_pointer local.get $2 i32.store - block $__inlined_func$~lib/string/String#substr$387 (result i32) + block $__inlined_func$~lib/string/String#substr$385 (result i32) i32.const 3 local.get $2 i32.const 20 @@ -937,7 +972,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 3456 - br $__inlined_func$~lib/string/String#substr$387 + br $__inlined_func$~lib/string/String#substr$385 end global.get $~lib/memory/__stack_pointer local.get $8 @@ -987,7 +1022,7 @@ global.get $~lib/memory/__stack_pointer i32.const 1872 i32.store - block $__inlined_func$~lib/string/String#padEnd$388 + block $__inlined_func$~lib/string/String#padEnd$386 i32.const 1868 i32.load i32.const -2 @@ -1003,7 +1038,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/string/String#padEnd$388 + br $__inlined_func$~lib/string/String#padEnd$386 end global.get $~lib/memory/__stack_pointer i32.const 6 @@ -1562,7 +1597,7 @@ global.get $~lib/memory/__stack_pointer i32.const 1872 i32.store - block $__inlined_func$~lib/string/String#padStart$384 + block $__inlined_func$~lib/string/String#padStart$382 i32.const 1868 i32.load i32.const -2 @@ -1581,7 +1616,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/string/String#padStart$384 + br $__inlined_func$~lib/string/String#padStart$382 end global.get $~lib/memory/__stack_pointer local.get $5 @@ -1761,7 +1796,7 @@ global.get $~lib/memory/__stack_pointer local.get $4 i32.store - block $__inlined_func$~lib/string/String#concat$385 + block $__inlined_func$~lib/string/String#concat$383 local.get $4 i32.const 20 i32.sub @@ -1780,7 +1815,7 @@ global.set $~lib/memory/__stack_pointer i32.const 3456 local.set $1 - br $__inlined_func$~lib/string/String#concat$385 + br $__inlined_func$~lib/string/String#concat$383 end global.get $~lib/memory/__stack_pointer local.get $1 @@ -2139,7 +2174,7 @@ i32.load16_u local.set $0 loop $while-continue|0 - block $__inlined_func$~lib/util/string/isSpace$164 (result i32) + block $__inlined_func$~lib/util/string/isSpace$158 (result i32) local.get $0 i32.const 128 i32.or @@ -2154,7 +2189,7 @@ local.get $0 i32.const 5760 i32.lt_u - br_if $__inlined_func$~lib/util/string/isSpace$164 + br_if $__inlined_func$~lib/util/string/isSpace$158 drop i32.const 1 local.get $0 @@ -2162,7 +2197,7 @@ i32.add i32.const 10 i32.le_u - br_if $__inlined_func$~lib/util/string/isSpace$164 + br_if $__inlined_func$~lib/util/string/isSpace$158 drop block $break|0 block $case0|0 @@ -2197,7 +2232,7 @@ br $break|0 end i32.const 1 - br $__inlined_func$~lib/util/string/isSpace$164 + br $__inlined_func$~lib/util/string/isSpace$158 end i32.const 0 end @@ -2884,7 +2919,7 @@ if i32.const 1392 i32.const 6736 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2907,7 +2942,7 @@ if i32.const 6832 i32.const 6736 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -3975,7 +4010,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$376 + block $__inlined_func$~lib/rt/itcms/Object#unlink$377 local.get $0 i32.load offset=4 i32.const -4 @@ -3999,7 +4034,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$376 + br $__inlined_func$~lib/rt/itcms/Object#unlink$377 end local.get $0 i32.load offset=8 @@ -4042,7 +4077,7 @@ if i32.const 1392 i32.const 1456 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -5653,7 +5688,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$363 + block $__inlined_func$~lib/rt/itcms/__renew$356 i32.const 1073741820 local.get $2 i32.const 1 @@ -5696,7 +5731,7 @@ i32.store offset=16 local.get $2 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$363 + br $__inlined_func$~lib/rt/itcms/__renew$356 end local.get $3 local.get $4 diff --git a/tests/compiler/std/encoding.debug.wat b/tests/compiler/std/encoding.debug.wat new file mode 100644 index 0000000000..ccb6f0d8c1 --- /dev/null +++ b/tests/compiler/std/encoding.debug.wat @@ -0,0 +1,3472 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $std/encoding/BASE i32 (i32.const 8192)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $std/encoding/DB i32 (i32.const 8448)) + (global $std/encoding/SRC i32 (i32.const 8536)) + (global $std/encoding/HEX i32 (i32.const 8636)) + (global $std/encoding/DEC i32 (i32.const 8736)) + (global $std/encoding/hexLen (mut i32) (i32.const 0)) + (global $std/encoding/decLen (mut i32) (i32.const 0)) + (global $std/encoding/BR i32 (i32.const 8960)) + (global $std/encoding/VB i32 (i32.const 9036)) + (global $std/encoding/bytesRead (mut i32) (i32.const 0)) + (global $std/encoding/written (mut i32) (i32.const 0)) + (global $std/encoding/decoded (mut i32) (i32.const 0)) + (global $std/encoding/decoded2 (mut i32) (i32.const 0)) + (global $std/encoding/decoded3 (mut i32) (i32.const 0)) + (global $std/encoding/VB64 i32 (i32.const 9136)) + (global $std/encoding/decoded64 (mut i64) (i64.const 0)) + (global $std/encoding/CB i32 (i32.const 9236)) + (global $std/encoding/compactDecoded (mut i64) (i64.const 0)) + (global $~lib/memory/__data_end i32 (i32.const 76)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32844)) + (global $~lib/memory/__heap_base i32 (i32.const 32844)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00s\00t\00d\00/\00e\00n\00c\00o\00d\00i\00n\00g\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $start:std/encoding + (local $value i32) + (local $dst i32) + (local $hi i32) + (local $lo i32) + (local $value|4 i32) + (local $dst|5 i32) + (local $hi|6 i32) + (local $lo|7 i32) + (local $value|8 i32) + (local $dst|9 i32) + (local $hi|10 i32) + (local $lo|11 i32) + (local $value|12 i32) + (local $dst|13 i32) + (local $hi|14 i32) + (local $lo|15 i32) + (local $src i32) + (local $c i32) + (local $hi|18 i32) + (local $c|19 i32) + (local $lo|20 i32) + (local $src|21 i32) + (local $c|22 i32) + (local $hi|23 i32) + (local $c|24 i32) + (local $lo|25 i32) + (local $src|26 i32) + (local $c|27 i32) + (local $hi|28 i32) + (local $c|29 i32) + (local $lo|30 i32) + (local $src|31 i32) + (local $c|32 i32) + (local $hi|33 i32) + (local $c|34 i32) + (local $lo|35 i32) + (local $src|36 i32) + (local $srcLen i32) + (local $dst|38 i32) + (local $i i32) + (local $value|40 i32) + (local $dst|41 i32) + (local $hi|42 i32) + (local $lo|43 i32) + (local $src|44 i32) + (local $srcLen|45 i32) + (local $dst|46 i32) + (local $outLen i32) + (local $i|48 i32) + (local $src|49 i32) + (local $c|50 i32) + (local $hi|51 i32) + (local $c|52 i32) + (local $lo|53 i32) + (local $b i32) + (local $src|55 i32) + (local $srcLen|56 i32) + (local $dst|57 i32) + (local $outLen|58 i32) + (local $i|59 i32) + (local $src|60 i32) + (local $c|61 i32) + (local $hi|62 i32) + (local $c|63 i32) + (local $lo|64 i32) + (local $b|65 i32) + (local $this i32) + (local $offset i32) + (local $value|68 i32) + (local $dst|69 i32) + (local $i|70 i32) + (local $value|71 i32) + (local $dst|72 i32) + (local $i|73 i32) + (local $value|74 i32) + (local $dst|75 i32) + (local $i|76 i32) + (local $src|77 i32) + (local $bytesRead i32) + (local $result i32) + (local $shift i32) + (local $i|81 i32) + (local $b|82 i32) + (local $this|83 i32) + (local $value|84 i32) + (local $this|85 i32) + (local $value|86 i32) + (local $dst|87 i32) + (local $i|88 i32) + (local $src|89 i32) + (local $bytesRead|90 i32) + (local $result|91 i32) + (local $shift|92 i32) + (local $i|93 i32) + (local $b|94 i32) + (local $this|95 i32) + (local $value|96 i32) + (local $value|97 i32) + (local $dst|98 i32) + (local $i|99 i32) + (local $src|100 i32) + (local $bytesRead|101 i32) + (local $result|102 i32) + (local $shift|103 i32) + (local $i|104 i32) + (local $b|105 i32) + (local $this|106 i32) + (local $value|107 i32) + (local $this|108 i32) + (local $value|109 i64) + (local $dst|110 i32) + (local $i|111 i32) + (local $src|112 i32) + (local $bytesRead|113 i32) + (local $result|114 i64) + (local $shift|115 i64) + (local $i|116 i32) + (local $b|117 i32) + (local $this|118 i32) + (local $value|119 i32) + (local $value|120 i64) + (local $dst|121 i32) + (local $src|122 i32) + (local $bytesRead|123 i32) + (local $first i32) + (local $this|125 i32) + (local $value|126 i32) + (local $this|127 i32) + (local $value|128 i32) + (local $this|129 i32) + (local $value|130 i32) + (local $this|131 i32) + (local $value|132 i32) + (local $this|133 i32) + (local $value|134 i64) + (local $dst|135 i32) + (local $src|136 i32) + (local $bytesRead|137 i32) + (local $first|138 i32) + (local $this|139 i32) + (local $value|140 i32) + (local $this|141 i32) + (local $value|142 i32) + (local $this|143 i32) + (local $value|144 i32) + (local $this|145 i32) + (local $value|146 i32) + (local $this|147 i32) + (local $value|148 i64) + (local $dst|149 i32) + (local $src|150 i32) + (local $bytesRead|151 i32) + (local $first|152 i32) + (local $this|153 i32) + (local $value|154 i32) + (local $this|155 i32) + (local $value|156 i32) + (local $this|157 i32) + (local $value|158 i32) + (local $this|159 i32) + (local $value|160 i32) + (local $this|161 i32) + (local $value|162 i64) + (local $dst|163 i32) + (local $src|164 i32) + (local $bytesRead|165 i32) + (local $first|166 i32) + (local $this|167 i32) + (local $value|168 i32) + (local $this|169 i32) + (local $value|170 i32) + (local $this|171 i32) + (local $value|172 i32) + (local $this|173 i32) + (local $value|174 i32) + (local $this|175 i32) + (local $value|176 i64) + (local $dst|177 i32) + (local $src|178 i32) + (local $bytesRead|179 i32) + (local $first|180 i32) + (local $this|181 i32) + (local $value|182 i32) + (local $this|183 i32) + (local $value|184 i32) + (local $this|185 i32) + (local $value|186 i32) + (local $this|187 i32) + (local $value|188 i32) + (local $this|189 i32) + i32.const 0 + local.set $value + global.get $std/encoding/BASE + local.set $dst + local.get $value + i32.const 4 + i32.const 7 + i32.and + i32.shr_u + i32.const 15 + i32.and + local.set $hi + local.get $value + i32.const 15 + i32.and + local.set $lo + local.get $dst + local.get $hi + i32.const 10 + i32.lt_u + if (result i32) + local.get $hi + i32.const 48 + i32.add + else + local.get $hi + i32.const 87 + i32.add + end + i32.store8 + local.get $dst + i32.const 1 + i32.add + local.get $lo + i32.const 10 + i32.lt_u + if (result i32) + local.get $lo + i32.const 48 + i32.add + else + local.get $lo + i32.const 87 + i32.add + end + i32.store8 + global.get $std/encoding/BASE + i32.load8_u + i32.const 48 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 11 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/BASE + i32.const 1 + i32.add + i32.load8_u + i32.const 48 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 12 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 255 + local.set $value|4 + global.get $std/encoding/BASE + i32.const 4 + i32.add + local.set $dst|5 + local.get $value|4 + i32.const 4 + i32.const 7 + i32.and + i32.shr_u + i32.const 15 + i32.and + local.set $hi|6 + local.get $value|4 + i32.const 15 + i32.and + local.set $lo|7 + local.get $dst|5 + local.get $hi|6 + i32.const 10 + i32.lt_u + if (result i32) + local.get $hi|6 + i32.const 48 + i32.add + else + local.get $hi|6 + i32.const 87 + i32.add + end + i32.store8 + local.get $dst|5 + i32.const 1 + i32.add + local.get $lo|7 + i32.const 10 + i32.lt_u + if (result i32) + local.get $lo|7 + i32.const 48 + i32.add + else + local.get $lo|7 + i32.const 87 + i32.add + end + i32.store8 + global.get $std/encoding/BASE + i32.const 4 + i32.add + i32.load8_u + i32.const 102 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 15 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/BASE + i32.const 5 + i32.add + i32.load8_u + i32.const 102 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 16 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 171 + local.set $value|8 + global.get $std/encoding/BASE + i32.const 8 + i32.add + local.set $dst|9 + local.get $value|8 + i32.const 4 + i32.const 7 + i32.and + i32.shr_u + i32.const 15 + i32.and + local.set $hi|10 + local.get $value|8 + i32.const 15 + i32.and + local.set $lo|11 + local.get $dst|9 + local.get $hi|10 + i32.const 10 + i32.lt_u + if (result i32) + local.get $hi|10 + i32.const 48 + i32.add + else + local.get $hi|10 + i32.const 87 + i32.add + end + i32.store8 + local.get $dst|9 + i32.const 1 + i32.add + local.get $lo|11 + i32.const 10 + i32.lt_u + if (result i32) + local.get $lo|11 + i32.const 48 + i32.add + else + local.get $lo|11 + i32.const 87 + i32.add + end + i32.store8 + global.get $std/encoding/BASE + i32.const 8 + i32.add + i32.load8_u + i32.const 97 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 19 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/BASE + i32.const 9 + i32.add + i32.load8_u + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 20 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 31 + local.set $value|12 + global.get $std/encoding/BASE + i32.const 12 + i32.add + local.set $dst|13 + local.get $value|12 + i32.const 4 + i32.const 7 + i32.and + i32.shr_u + i32.const 15 + i32.and + local.set $hi|14 + local.get $value|12 + i32.const 15 + i32.and + local.set $lo|15 + local.get $dst|13 + local.get $hi|14 + i32.const 10 + i32.lt_u + if (result i32) + local.get $hi|14 + i32.const 48 + i32.add + else + local.get $hi|14 + i32.const 87 + i32.add + end + i32.store8 + local.get $dst|13 + i32.const 1 + i32.add + local.get $lo|15 + i32.const 10 + i32.lt_u + if (result i32) + local.get $lo|15 + i32.const 48 + i32.add + else + local.get $lo|15 + i32.const 87 + i32.add + end + i32.store8 + global.get $std/encoding/BASE + i32.const 12 + i32.add + i32.load8_u + i32.const 49 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 23 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/BASE + i32.const 13 + i32.add + i32.load8_u + i32.const 102 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 24 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DB + i32.const 48 + i32.store8 + global.get $std/encoding/DB + i32.const 1 + i32.add + i32.const 48 + i32.store8 + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.0 (result i32) + global.get $std/encoding/DB + local.set $src + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 (result i32) + local.get $src + i32.load8_u + local.set $c + local.get $c + i32.const 48 + i32.ge_u + if (result i32) + local.get $c + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + end + local.get $c + i32.const 97 + i32.ge_u + if (result i32) + local.get $c + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + end + local.get $c + i32.const 65 + i32.ge_u + if (result i32) + local.get $c + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + end + local.set $hi|18 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 (result i32) + local.get $src + i32.const 1 + i32.add + i32.load8_u + local.set $c|19 + local.get $c|19 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|19 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|19 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + end + local.get $c|19 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|19 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|19 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + end + local.get $c|19 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|19 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|19 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + end + local.set $lo|20 + local.get $hi|18 + local.get $lo|20 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.0 + end + local.get $hi|18 + i32.const 4 + i32.shl + local.get $lo|20 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.0 + end + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 29 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DB + i32.const 2 + i32.add + i32.const 102 + i32.store8 + global.get $std/encoding/DB + i32.const 3 + i32.add + i32.const 102 + i32.store8 + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.1 (result i32) + global.get $std/encoding/DB + i32.const 2 + i32.add + local.set $src|21 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 (result i32) + local.get $src|21 + i32.load8_u + local.set $c|22 + local.get $c|22 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|22 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|22 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + end + local.get $c|22 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|22 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|22 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + end + local.get $c|22 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|22 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|22 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + end + local.set $hi|23 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 (result i32) + local.get $src|21 + i32.const 1 + i32.add + i32.load8_u + local.set $c|24 + local.get $c|24 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|24 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|24 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + end + local.get $c|24 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|24 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|24 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + end + local.get $c|24 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|24 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|24 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + end + local.set $lo|25 + local.get $hi|23 + local.get $lo|25 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.1 + end + local.get $hi|23 + i32.const 4 + i32.shl + local.get $lo|25 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.1 + end + i32.const 255 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 32 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DB + i32.const 4 + i32.add + i32.const 65 + i32.store8 + global.get $std/encoding/DB + i32.const 5 + i32.add + i32.const 66 + i32.store8 + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.2 (result i32) + global.get $std/encoding/DB + i32.const 4 + i32.add + local.set $src|26 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 (result i32) + local.get $src|26 + i32.load8_u + local.set $c|27 + local.get $c|27 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|27 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|27 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + end + local.get $c|27 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|27 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|27 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + end + local.get $c|27 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|27 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|27 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + end + local.set $hi|28 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 (result i32) + local.get $src|26 + i32.const 1 + i32.add + i32.load8_u + local.set $c|29 + local.get $c|29 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|29 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|29 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + end + local.get $c|29 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|29 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|29 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + end + local.get $c|29 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|29 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|29 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + end + local.set $lo|30 + local.get $hi|28 + local.get $lo|30 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.2 + end + local.get $hi|28 + i32.const 4 + i32.shl + local.get $lo|30 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.2 + end + i32.const 171 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 35 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DB + i32.const 8 + i32.add + i32.const 103 + i32.store8 + global.get $std/encoding/DB + i32.const 9 + i32.add + i32.const 48 + i32.store8 + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.3 (result i32) + global.get $std/encoding/DB + i32.const 8 + i32.add + local.set $src|31 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 (result i32) + local.get $src|31 + i32.load8_u + local.set $c|32 + local.get $c|32 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|32 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|32 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + end + local.get $c|32 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|32 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|32 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + end + local.get $c|32 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|32 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|32 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + end + local.set $hi|33 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 (result i32) + local.get $src|31 + i32.const 1 + i32.add + i32.load8_u + local.set $c|34 + local.get $c|34 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|34 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|34 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + end + local.get $c|34 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|34 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|34 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + end + local.get $c|34 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|34 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|34 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + end + local.set $lo|35 + local.get $hi|33 + local.get $lo|35 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.3 + end + local.get $hi|33 + i32.const 4 + i32.shl + local.get $lo|35 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.3 + end + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 39 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/SRC + i32.const 222 + i32.store8 + global.get $std/encoding/SRC + i32.const 1 + i32.add + i32.const 173 + i32.store8 + global.get $std/encoding/SRC + i32.const 2 + i32.add + i32.const 190 + i32.store8 + global.get $std/encoding/SRC + i32.const 3 + i32.add + i32.const 239 + i32.store8 + block $~lib/encoding/Encoding.Hex.encode|inlined.0 (result i32) + global.get $std/encoding/SRC + local.set $src|36 + i32.const 4 + local.set $srcLen + global.get $std/encoding/HEX + local.set $dst|38 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $srcLen + i32.lt_s + if + local.get $src|36 + local.get $i + i32.add + i32.load8_u + local.set $value|40 + local.get $dst|38 + local.get $i + i32.const 1 + i32.shl + i32.add + local.set $dst|41 + local.get $value|40 + i32.const 4 + i32.const 7 + i32.and + i32.shr_u + i32.const 15 + i32.and + local.set $hi|42 + local.get $value|40 + i32.const 15 + i32.and + local.set $lo|43 + local.get $dst|41 + local.get $hi|42 + i32.const 10 + i32.lt_u + if (result i32) + local.get $hi|42 + i32.const 48 + i32.add + else + local.get $hi|42 + i32.const 87 + i32.add + end + i32.store8 + local.get $dst|41 + i32.const 1 + i32.add + local.get $lo|43 + i32.const 10 + i32.lt_u + if (result i32) + local.get $lo|43 + i32.const 48 + i32.add + else + local.get $lo|43 + i32.const 87 + i32.add + end + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $srcLen + i32.const 1 + i32.shl + br $~lib/encoding/Encoding.Hex.encode|inlined.0 + end + global.set $std/encoding/hexLen + global.get $std/encoding/hexLen + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 50 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Hex.decode|inlined.0 (result i32) + global.get $std/encoding/HEX + local.set $src|44 + i32.const 8 + local.set $srcLen|45 + global.get $std/encoding/DEC + local.set $dst|46 + local.get $srcLen|45 + i32.const 1 + i32.and + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decode|inlined.0 + end + local.get $srcLen|45 + i32.const 1 + i32.shr_s + local.set $outLen + i32.const 0 + local.set $i|48 + loop $for-loop|1 + local.get $i|48 + local.get $outLen + i32.lt_s + if + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.4 (result i32) + local.get $src|44 + local.get $i|48 + i32.const 1 + i32.shl + i32.add + local.set $src|49 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 (result i32) + local.get $src|49 + i32.load8_u + local.set $c|50 + local.get $c|50 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|50 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|50 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + end + local.get $c|50 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|50 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|50 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + end + local.get $c|50 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|50 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|50 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + end + local.set $hi|51 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 (result i32) + local.get $src|49 + i32.const 1 + i32.add + i32.load8_u + local.set $c|52 + local.get $c|52 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|52 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|52 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + end + local.get $c|52 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|52 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|52 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + end + local.get $c|52 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|52 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|52 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + end + local.set $lo|53 + local.get $hi|51 + local.get $lo|53 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.4 + end + local.get $hi|51 + i32.const 4 + i32.shl + local.get $lo|53 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.4 + end + local.set $b + local.get $b + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decode|inlined.0 + end + local.get $dst|46 + local.get $i|48 + i32.add + local.get $b + i32.store8 + local.get $i|48 + i32.const 1 + i32.add + local.set $i|48 + br $for-loop|1 + end + end + local.get $outLen + br $~lib/encoding/Encoding.Hex.decode|inlined.0 + end + global.set $std/encoding/decLen + global.get $std/encoding/decLen + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DEC + i32.load8_u + i32.const 222 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 54 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DEC + i32.const 1 + i32.add + i32.load8_u + i32.const 173 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 55 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DEC + i32.const 2 + i32.add + i32.load8_u + i32.const 190 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 56 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/DEC + i32.const 3 + i32.add + i32.load8_u + i32.const 239 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 57 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Hex.decode|inlined.1 (result i32) + global.get $std/encoding/HEX + local.set $src|55 + i32.const 7 + local.set $srcLen|56 + global.get $std/encoding/DEC + i32.const 100 + i32.add + local.set $dst|57 + local.get $srcLen|56 + i32.const 1 + i32.and + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decode|inlined.1 + end + local.get $srcLen|56 + i32.const 1 + i32.shr_s + local.set $outLen|58 + i32.const 0 + local.set $i|59 + loop $for-loop|2 + local.get $i|59 + local.get $outLen|58 + i32.lt_s + if + block $~lib/encoding/Encoding.Hex.decodeByte|inlined.5 (result i32) + local.get $src|55 + local.get $i|59 + i32.const 1 + i32.shl + i32.add + local.set $src|60 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.10 (result i32) + local.get $src|60 + i32.load8_u + local.set $c|61 + local.get $c|61 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|61 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|61 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.10 + end + local.get $c|61 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|61 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|61 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.10 + end + local.get $c|61 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|61 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|61 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.10 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.10 + end + local.set $hi|62 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.11 (result i32) + local.get $src|60 + i32.const 1 + i32.add + i32.load8_u + local.set $c|63 + local.get $c|63 + i32.const 48 + i32.ge_u + if (result i32) + local.get $c|63 + i32.const 57 + i32.le_u + else + i32.const 0 + end + if + local.get $c|63 + i32.const 48 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.11 + end + local.get $c|63 + i32.const 97 + i32.ge_u + if (result i32) + local.get $c|63 + i32.const 102 + i32.le_u + else + i32.const 0 + end + if + local.get $c|63 + i32.const 87 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.11 + end + local.get $c|63 + i32.const 65 + i32.ge_u + if (result i32) + local.get $c|63 + i32.const 70 + i32.le_u + else + i32.const 0 + end + if + local.get $c|63 + i32.const 55 + i32.sub + i32.const 255 + i32.and + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.11 + end + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeNibble|inlined.11 + end + local.set $lo|64 + local.get $hi|62 + local.get $lo|64 + i32.or + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.5 + end + local.get $hi|62 + i32.const 4 + i32.shl + local.get $lo|64 + i32.or + br $~lib/encoding/Encoding.Hex.decodeByte|inlined.5 + end + local.set $b|65 + local.get $b|65 + i32.const 0 + i32.lt_s + if + i32.const -1 + br $~lib/encoding/Encoding.Hex.decode|inlined.1 + end + local.get $dst|57 + local.get $i|59 + i32.add + local.get $b|65 + i32.store8 + local.get $i|59 + i32.const 1 + i32.add + local.set $i|59 + br $for-loop|2 + end + end + local.get $outLen|58 + br $~lib/encoding/Encoding.Hex.decode|inlined.1 + end + i32.const -1 + i32.eq + drop + block $~lib/pointer/Pointer#constructor|inlined.0 (result i32) + i32.const 0 + local.set $this + global.get $std/encoding/BR + local.set $offset + local.get $offset + br $~lib/pointer/Pointer#constructor|inlined.0 + end + global.set $std/encoding/bytesRead + block $~lib/encoding/Encoding.Varint.encodeU32|inlined.0 (result i32) + i32.const 0 + local.set $value|68 + global.get $std/encoding/VB + local.set $dst|69 + i32.const 0 + local.set $i|70 + loop $while-continue|3 + local.get $value|68 + i32.const 128 + i32.ge_u + if + local.get $dst|69 + local.get $i|70 + i32.add + local.get $value|68 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $value|68 + i32.const 7 + i32.shr_u + local.set $value|68 + local.get $i|70 + i32.const 1 + i32.add + local.set $i|70 + br $while-continue|3 + end + end + local.get $dst|69 + local.get $i|70 + i32.add + local.get $value|68 + i32.store8 + local.get $i|70 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU32|inlined.0 + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/VB + i32.load8_u + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeU32|inlined.1 (result i32) + i32.const 127 + local.set $value|71 + global.get $std/encoding/VB + local.set $dst|72 + i32.const 0 + local.set $i|73 + loop $while-continue|4 + local.get $value|71 + i32.const 128 + i32.ge_u + if + local.get $dst|72 + local.get $i|73 + i32.add + local.get $value|71 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $value|71 + i32.const 7 + i32.shr_u + local.set $value|71 + local.get $i|73 + i32.const 1 + i32.add + local.set $i|73 + br $while-continue|4 + end + end + local.get $dst|72 + local.get $i|73 + i32.add + local.get $value|71 + i32.store8 + local.get $i|73 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU32|inlined.1 + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 77 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/VB + i32.load8_u + i32.const 127 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 78 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeU32|inlined.2 (result i32) + i32.const 128 + local.set $value|74 + global.get $std/encoding/VB + local.set $dst|75 + i32.const 0 + local.set $i|76 + loop $while-continue|5 + local.get $value|74 + i32.const 128 + i32.ge_u + if + local.get $dst|75 + local.get $i|76 + i32.add + local.get $value|74 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $value|74 + i32.const 7 + i32.shr_u + local.set $value|74 + local.get $i|76 + i32.const 1 + i32.add + local.set $i|76 + br $while-continue|5 + end + end + local.get $dst|75 + local.get $i|76 + i32.add + local.get $value|74 + i32.store8 + local.get $i|76 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU32|inlined.2 + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 82 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeU32|inlined.0 (result i32) + global.get $std/encoding/VB + local.set $src|77 + global.get $std/encoding/bytesRead + local.set $bytesRead + i32.const 0 + local.set $result + i32.const 0 + local.set $shift + i32.const 0 + local.set $i|81 + block $do-break|6 + loop $do-loop|6 + local.get $src|77 + local.get $i|81 + i32.add + i32.load8_u + local.set $b|82 + local.get $result + local.get $b|82 + i32.const 127 + i32.and + local.get $shift + i32.shl + i32.or + local.set $result + local.get $shift + i32.const 7 + i32.add + local.set $shift + local.get $i|81 + i32.const 1 + i32.add + local.set $i|81 + local.get $i|81 + i32.const 5 + i32.ge_s + if + br $do-break|6 + end + local.get $b|82 + i32.const 128 + i32.and + br_if $do-loop|6 + end + end + local.get $bytesRead + local.set $this|83 + local.get $i|81 + local.set $value|84 + i32.const 0 + drop + local.get $this|83 + local.get $value|84 + i32.store + local.get $result + br $~lib/encoding/Encoding.Varint.decodeU32|inlined.0 + end + global.set $std/encoding/decoded + global.get $std/encoding/decoded + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 84 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.0 (result i32) + global.get $std/encoding/bytesRead + local.set $this|85 + i32.const 0 + drop + local.get $this|85 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.0 + end + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 85 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeU32|inlined.3 (result i32) + i32.const 300 + local.set $value|86 + global.get $std/encoding/VB + local.set $dst|87 + i32.const 0 + local.set $i|88 + loop $while-continue|7 + local.get $value|86 + i32.const 128 + i32.ge_u + if + local.get $dst|87 + local.get $i|88 + i32.add + local.get $value|86 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $value|86 + i32.const 7 + i32.shr_u + local.set $value|86 + local.get $i|88 + i32.const 1 + i32.add + local.set $i|88 + br $while-continue|7 + end + end + local.get $dst|87 + local.get $i|88 + i32.add + local.get $value|86 + i32.store8 + local.get $i|88 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU32|inlined.3 + end + global.set $std/encoding/written + block $~lib/encoding/Encoding.Varint.decodeU32|inlined.1 (result i32) + global.get $std/encoding/VB + local.set $src|89 + global.get $std/encoding/bytesRead + local.set $bytesRead|90 + i32.const 0 + local.set $result|91 + i32.const 0 + local.set $shift|92 + i32.const 0 + local.set $i|93 + block $do-break|8 + loop $do-loop|8 + local.get $src|89 + local.get $i|93 + i32.add + i32.load8_u + local.set $b|94 + local.get $result|91 + local.get $b|94 + i32.const 127 + i32.and + local.get $shift|92 + i32.shl + i32.or + local.set $result|91 + local.get $shift|92 + i32.const 7 + i32.add + local.set $shift|92 + local.get $i|93 + i32.const 1 + i32.add + local.set $i|93 + local.get $i|93 + i32.const 5 + i32.ge_s + if + br $do-break|8 + end + local.get $b|94 + i32.const 128 + i32.and + br_if $do-loop|8 + end + end + local.get $bytesRead|90 + local.set $this|95 + local.get $i|93 + local.set $value|96 + i32.const 0 + drop + local.get $this|95 + local.get $value|96 + i32.store + local.get $result|91 + br $~lib/encoding/Encoding.Varint.decodeU32|inlined.1 + end + global.set $std/encoding/decoded2 + global.get $std/encoding/decoded2 + i32.const 300 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 89 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeU32|inlined.4 (result i32) + i32.const -1 + local.set $value|97 + global.get $std/encoding/VB + local.set $dst|98 + i32.const 0 + local.set $i|99 + loop $while-continue|9 + local.get $value|97 + i32.const 128 + i32.ge_u + if + local.get $dst|98 + local.get $i|99 + i32.add + local.get $value|97 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $value|97 + i32.const 7 + i32.shr_u + local.set $value|97 + local.get $i|99 + i32.const 1 + i32.add + local.set $i|99 + br $while-continue|9 + end + end + local.get $dst|98 + local.get $i|99 + i32.add + local.get $value|97 + i32.store8 + local.get $i|99 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU32|inlined.4 + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 93 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeU32|inlined.2 (result i32) + global.get $std/encoding/VB + local.set $src|100 + global.get $std/encoding/bytesRead + local.set $bytesRead|101 + i32.const 0 + local.set $result|102 + i32.const 0 + local.set $shift|103 + i32.const 0 + local.set $i|104 + block $do-break|10 + loop $do-loop|10 + local.get $src|100 + local.get $i|104 + i32.add + i32.load8_u + local.set $b|105 + local.get $result|102 + local.get $b|105 + i32.const 127 + i32.and + local.get $shift|103 + i32.shl + i32.or + local.set $result|102 + local.get $shift|103 + i32.const 7 + i32.add + local.set $shift|103 + local.get $i|104 + i32.const 1 + i32.add + local.set $i|104 + local.get $i|104 + i32.const 5 + i32.ge_s + if + br $do-break|10 + end + local.get $b|105 + i32.const 128 + i32.and + br_if $do-loop|10 + end + end + local.get $bytesRead|101 + local.set $this|106 + local.get $i|104 + local.set $value|107 + i32.const 0 + drop + local.get $this|106 + local.get $value|107 + i32.store + local.get $result|102 + br $~lib/encoding/Encoding.Varint.decodeU32|inlined.2 + end + global.set $std/encoding/decoded3 + global.get $std/encoding/decoded3 + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 95 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.1 (result i32) + global.get $std/encoding/bytesRead + local.set $this|108 + i32.const 0 + drop + local.get $this|108 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.1 + end + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 96 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeU64|inlined.0 (result i32) + i64.const 72623859790382856 + local.set $value|109 + global.get $std/encoding/VB64 + local.set $dst|110 + i32.const 0 + local.set $i|111 + loop $while-continue|11 + local.get $value|109 + i64.const 128 + i64.ge_u + if + local.get $dst|110 + local.get $i|111 + i32.add + local.get $value|109 + i64.const 127 + i64.and + i32.wrap_i64 + i32.const 128 + i32.or + i32.store8 + local.get $value|109 + i64.const 7 + i64.shr_u + local.set $value|109 + local.get $i|111 + i32.const 1 + i32.add + local.set $i|111 + br $while-continue|11 + end + end + local.get $dst|110 + local.get $i|111 + i32.add + local.get $value|109 + i32.wrap_i64 + i32.store8 + local.get $i|111 + i32.const 1 + i32.add + br $~lib/encoding/Encoding.Varint.encodeU64|inlined.0 + end + global.set $std/encoding/written + block $~lib/encoding/Encoding.Varint.decodeU64|inlined.0 (result i64) + global.get $std/encoding/VB64 + local.set $src|112 + global.get $std/encoding/bytesRead + local.set $bytesRead|113 + i64.const 0 + local.set $result|114 + i64.const 0 + local.set $shift|115 + i32.const 0 + local.set $i|116 + block $do-break|12 + loop $do-loop|12 + local.get $src|112 + local.get $i|116 + i32.add + i32.load8_u + local.set $b|117 + local.get $result|114 + local.get $b|117 + i32.const 127 + i32.and + i64.extend_i32_u + local.get $shift|115 + i64.shl + i64.or + local.set $result|114 + local.get $shift|115 + i64.const 7 + i64.add + local.set $shift|115 + local.get $i|116 + i32.const 1 + i32.add + local.set $i|116 + local.get $i|116 + i32.const 10 + i32.ge_s + if + br $do-break|12 + end + local.get $b|117 + i32.const 128 + i32.and + br_if $do-loop|12 + end + end + local.get $bytesRead|113 + local.set $this|118 + local.get $i|116 + local.set $value|119 + i32.const 0 + drop + local.get $this|118 + local.get $value|119 + i32.store + local.get $result|114 + br $~lib/encoding/Encoding.Varint.decodeU64|inlined.0 + end + global.set $std/encoding/decoded64 + global.get $std/encoding/decoded64 + i64.const 72623859790382856 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 102 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeCompact|inlined.0 (result i32) + i64.const 252 + local.set $value|120 + global.get $std/encoding/CB + local.set $dst|121 + local.get $value|120 + i64.const 253 + i64.lt_u + if + local.get $dst|121 + local.get $value|120 + i32.wrap_i64 + i32.store8 + i32.const 1 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.0 + else + local.get $value|120 + i64.const 65535 + i64.le_u + if + local.get $dst|121 + i32.const 253 + i32.store8 + local.get $dst|121 + i32.const 1 + i32.add + local.get $value|120 + i32.wrap_i64 + i32.store16 + i32.const 3 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.0 + else + local.get $value|120 + i64.const 4294967295 + i64.le_u + if + local.get $dst|121 + i32.const 254 + i32.store8 + local.get $dst|121 + i32.const 1 + i32.add + local.get $value|120 + i32.wrap_i64 + i32.store + i32.const 5 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.0 + else + local.get $dst|121 + i32.const 255 + i32.store8 + local.get $dst|121 + i32.const 1 + i32.add + local.get $value|120 + i64.store + i32.const 9 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.0 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 110 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeCompact|inlined.0 (result i64) + global.get $std/encoding/CB + local.set $src|122 + global.get $std/encoding/bytesRead + local.set $bytesRead|123 + local.get $src|122 + i32.load8_u + local.set $first + local.get $first + i32.const 253 + i32.lt_u + if + local.get $bytesRead|123 + local.set $this|125 + i32.const 1 + local.set $value|126 + i32.const 0 + drop + local.get $this|125 + local.get $value|126 + i32.store + local.get $first + i64.extend_i32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.0 + else + local.get $first + i32.const 253 + i32.eq + if + local.get $bytesRead|123 + local.set $this|127 + i32.const 3 + local.set $value|128 + i32.const 0 + drop + local.get $this|127 + local.get $value|128 + i32.store + local.get $src|122 + i32.const 1 + i32.add + i64.load16_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.0 + else + local.get $first + i32.const 254 + i32.eq + if + local.get $bytesRead|123 + local.set $this|129 + i32.const 5 + local.set $value|130 + i32.const 0 + drop + local.get $this|129 + local.get $value|130 + i32.store + local.get $src|122 + i32.const 1 + i32.add + i64.load32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.0 + else + local.get $bytesRead|123 + local.set $this|131 + i32.const 9 + local.set $value|132 + i32.const 0 + drop + local.get $this|131 + local.get $value|132 + i32.store + local.get $src|122 + i32.const 1 + i32.add + i64.load + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.0 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 252 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 112 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.2 (result i32) + global.get $std/encoding/bytesRead + local.set $this|133 + i32.const 0 + drop + local.get $this|133 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.2 + end + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 113 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeCompact|inlined.1 (result i32) + i64.const 253 + local.set $value|134 + global.get $std/encoding/CB + local.set $dst|135 + local.get $value|134 + i64.const 253 + i64.lt_u + if + local.get $dst|135 + local.get $value|134 + i32.wrap_i64 + i32.store8 + i32.const 1 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.1 + else + local.get $value|134 + i64.const 65535 + i64.le_u + if + local.get $dst|135 + i32.const 253 + i32.store8 + local.get $dst|135 + i32.const 1 + i32.add + local.get $value|134 + i32.wrap_i64 + i32.store16 + i32.const 3 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.1 + else + local.get $value|134 + i64.const 4294967295 + i64.le_u + if + local.get $dst|135 + i32.const 254 + i32.store8 + local.get $dst|135 + i32.const 1 + i32.add + local.get $value|134 + i32.wrap_i64 + i32.store + i32.const 5 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.1 + else + local.get $dst|135 + i32.const 255 + i32.store8 + local.get $dst|135 + i32.const 1 + i32.add + local.get $value|134 + i64.store + i32.const 9 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.1 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 117 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeCompact|inlined.1 (result i64) + global.get $std/encoding/CB + local.set $src|136 + global.get $std/encoding/bytesRead + local.set $bytesRead|137 + local.get $src|136 + i32.load8_u + local.set $first|138 + local.get $first|138 + i32.const 253 + i32.lt_u + if + local.get $bytesRead|137 + local.set $this|139 + i32.const 1 + local.set $value|140 + i32.const 0 + drop + local.get $this|139 + local.get $value|140 + i32.store + local.get $first|138 + i64.extend_i32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.1 + else + local.get $first|138 + i32.const 253 + i32.eq + if + local.get $bytesRead|137 + local.set $this|141 + i32.const 3 + local.set $value|142 + i32.const 0 + drop + local.get $this|141 + local.get $value|142 + i32.store + local.get $src|136 + i32.const 1 + i32.add + i64.load16_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.1 + else + local.get $first|138 + i32.const 254 + i32.eq + if + local.get $bytesRead|137 + local.set $this|143 + i32.const 5 + local.set $value|144 + i32.const 0 + drop + local.get $this|143 + local.get $value|144 + i32.store + local.get $src|136 + i32.const 1 + i32.add + i64.load32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.1 + else + local.get $bytesRead|137 + local.set $this|145 + i32.const 9 + local.set $value|146 + i32.const 0 + drop + local.get $this|145 + local.get $value|146 + i32.store + local.get $src|136 + i32.const 1 + i32.add + i64.load + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.1 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 253 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 119 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.3 (result i32) + global.get $std/encoding/bytesRead + local.set $this|147 + i32.const 0 + drop + local.get $this|147 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.3 + end + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 120 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeCompact|inlined.2 (result i32) + i64.const 65535 + local.set $value|148 + global.get $std/encoding/CB + local.set $dst|149 + local.get $value|148 + i64.const 253 + i64.lt_u + if + local.get $dst|149 + local.get $value|148 + i32.wrap_i64 + i32.store8 + i32.const 1 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.2 + else + local.get $value|148 + i64.const 65535 + i64.le_u + if + local.get $dst|149 + i32.const 253 + i32.store8 + local.get $dst|149 + i32.const 1 + i32.add + local.get $value|148 + i32.wrap_i64 + i32.store16 + i32.const 3 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.2 + else + local.get $value|148 + i64.const 4294967295 + i64.le_u + if + local.get $dst|149 + i32.const 254 + i32.store8 + local.get $dst|149 + i32.const 1 + i32.add + local.get $value|148 + i32.wrap_i64 + i32.store + i32.const 5 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.2 + else + local.get $dst|149 + i32.const 255 + i32.store8 + local.get $dst|149 + i32.const 1 + i32.add + local.get $value|148 + i64.store + i32.const 9 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.2 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 123 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeCompact|inlined.2 (result i64) + global.get $std/encoding/CB + local.set $src|150 + global.get $std/encoding/bytesRead + local.set $bytesRead|151 + local.get $src|150 + i32.load8_u + local.set $first|152 + local.get $first|152 + i32.const 253 + i32.lt_u + if + local.get $bytesRead|151 + local.set $this|153 + i32.const 1 + local.set $value|154 + i32.const 0 + drop + local.get $this|153 + local.get $value|154 + i32.store + local.get $first|152 + i64.extend_i32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.2 + else + local.get $first|152 + i32.const 253 + i32.eq + if + local.get $bytesRead|151 + local.set $this|155 + i32.const 3 + local.set $value|156 + i32.const 0 + drop + local.get $this|155 + local.get $value|156 + i32.store + local.get $src|150 + i32.const 1 + i32.add + i64.load16_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.2 + else + local.get $first|152 + i32.const 254 + i32.eq + if + local.get $bytesRead|151 + local.set $this|157 + i32.const 5 + local.set $value|158 + i32.const 0 + drop + local.get $this|157 + local.get $value|158 + i32.store + local.get $src|150 + i32.const 1 + i32.add + i64.load32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.2 + else + local.get $bytesRead|151 + local.set $this|159 + i32.const 9 + local.set $value|160 + i32.const 0 + drop + local.get $this|159 + local.get $value|160 + i32.store + local.get $src|150 + i32.const 1 + i32.add + i64.load + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.2 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 65535 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 125 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.4 (result i32) + global.get $std/encoding/bytesRead + local.set $this|161 + i32.const 0 + drop + local.get $this|161 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.4 + end + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 126 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeCompact|inlined.3 (result i32) + i64.const 65536 + local.set $value|162 + global.get $std/encoding/CB + local.set $dst|163 + local.get $value|162 + i64.const 253 + i64.lt_u + if + local.get $dst|163 + local.get $value|162 + i32.wrap_i64 + i32.store8 + i32.const 1 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.3 + else + local.get $value|162 + i64.const 65535 + i64.le_u + if + local.get $dst|163 + i32.const 253 + i32.store8 + local.get $dst|163 + i32.const 1 + i32.add + local.get $value|162 + i32.wrap_i64 + i32.store16 + i32.const 3 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.3 + else + local.get $value|162 + i64.const 4294967295 + i64.le_u + if + local.get $dst|163 + i32.const 254 + i32.store8 + local.get $dst|163 + i32.const 1 + i32.add + local.get $value|162 + i32.wrap_i64 + i32.store + i32.const 5 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.3 + else + local.get $dst|163 + i32.const 255 + i32.store8 + local.get $dst|163 + i32.const 1 + i32.add + local.get $value|162 + i64.store + i32.const 9 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.3 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 130 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeCompact|inlined.3 (result i64) + global.get $std/encoding/CB + local.set $src|164 + global.get $std/encoding/bytesRead + local.set $bytesRead|165 + local.get $src|164 + i32.load8_u + local.set $first|166 + local.get $first|166 + i32.const 253 + i32.lt_u + if + local.get $bytesRead|165 + local.set $this|167 + i32.const 1 + local.set $value|168 + i32.const 0 + drop + local.get $this|167 + local.get $value|168 + i32.store + local.get $first|166 + i64.extend_i32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.3 + else + local.get $first|166 + i32.const 253 + i32.eq + if + local.get $bytesRead|165 + local.set $this|169 + i32.const 3 + local.set $value|170 + i32.const 0 + drop + local.get $this|169 + local.get $value|170 + i32.store + local.get $src|164 + i32.const 1 + i32.add + i64.load16_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.3 + else + local.get $first|166 + i32.const 254 + i32.eq + if + local.get $bytesRead|165 + local.set $this|171 + i32.const 5 + local.set $value|172 + i32.const 0 + drop + local.get $this|171 + local.get $value|172 + i32.store + local.get $src|164 + i32.const 1 + i32.add + i64.load32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.3 + else + local.get $bytesRead|165 + local.set $this|173 + i32.const 9 + local.set $value|174 + i32.const 0 + drop + local.get $this|173 + local.get $value|174 + i32.store + local.get $src|164 + i32.const 1 + i32.add + i64.load + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.3 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 65536 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 132 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.5 (result i32) + global.get $std/encoding/bytesRead + local.set $this|175 + i32.const 0 + drop + local.get $this|175 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.5 + end + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 133 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.encodeCompact|inlined.4 (result i32) + i64.const 4294967296 + local.set $value|176 + global.get $std/encoding/CB + local.set $dst|177 + local.get $value|176 + i64.const 253 + i64.lt_u + if + local.get $dst|177 + local.get $value|176 + i32.wrap_i64 + i32.store8 + i32.const 1 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.4 + else + local.get $value|176 + i64.const 65535 + i64.le_u + if + local.get $dst|177 + i32.const 253 + i32.store8 + local.get $dst|177 + i32.const 1 + i32.add + local.get $value|176 + i32.wrap_i64 + i32.store16 + i32.const 3 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.4 + else + local.get $value|176 + i64.const 4294967295 + i64.le_u + if + local.get $dst|177 + i32.const 254 + i32.store8 + local.get $dst|177 + i32.const 1 + i32.add + local.get $value|176 + i32.wrap_i64 + i32.store + i32.const 5 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.4 + else + local.get $dst|177 + i32.const 255 + i32.store8 + local.get $dst|177 + i32.const 1 + i32.add + local.get $value|176 + i64.store + i32.const 9 + br $~lib/encoding/Encoding.Varint.encodeCompact|inlined.4 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 137 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/encoding/Encoding.Varint.decodeCompact|inlined.4 (result i64) + global.get $std/encoding/CB + local.set $src|178 + global.get $std/encoding/bytesRead + local.set $bytesRead|179 + local.get $src|178 + i32.load8_u + local.set $first|180 + local.get $first|180 + i32.const 253 + i32.lt_u + if + local.get $bytesRead|179 + local.set $this|181 + i32.const 1 + local.set $value|182 + i32.const 0 + drop + local.get $this|181 + local.get $value|182 + i32.store + local.get $first|180 + i64.extend_i32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.4 + else + local.get $first|180 + i32.const 253 + i32.eq + if + local.get $bytesRead|179 + local.set $this|183 + i32.const 3 + local.set $value|184 + i32.const 0 + drop + local.get $this|183 + local.get $value|184 + i32.store + local.get $src|178 + i32.const 1 + i32.add + i64.load16_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.4 + else + local.get $first|180 + i32.const 254 + i32.eq + if + local.get $bytesRead|179 + local.set $this|185 + i32.const 5 + local.set $value|186 + i32.const 0 + drop + local.get $this|185 + local.get $value|186 + i32.store + local.get $src|178 + i32.const 1 + i32.add + i64.load32_u + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.4 + else + local.get $bytesRead|179 + local.set $this|187 + i32.const 9 + local.set $value|188 + i32.const 0 + drop + local.get $this|187 + local.get $value|188 + i32.store + local.get $src|178 + i32.const 1 + i32.add + i64.load + br $~lib/encoding/Encoding.Varint.decodeCompact|inlined.4 + end + unreachable + end + unreachable + end + unreachable + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 4294967296 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 139 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get:value|inlined.6 (result i32) + global.get $std/encoding/bytesRead + local.set $this|189 + i32.const 0 + drop + local.get $this|189 + i32.load + br $~lib/pointer/Pointer#get:value|inlined.6 + end + i32.const 9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 140 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:std/encoding + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32864 + i32.const 32912 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/std/encoding.json b/tests/compiler/std/encoding.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/encoding.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/encoding.release.wat b/tests/compiler/std/encoding.release.wat new file mode 100644 index 0000000000..9767171204 --- /dev/null +++ b/tests/compiler/std/encoding.release.wat @@ -0,0 +1,1812 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $std/encoding/decLen (mut i32) (i32.const 0)) + (global $std/encoding/bytesRead (mut i32) (i32.const 0)) + (global $std/encoding/written (mut i32) (i32.const 0)) + (global $std/encoding/decoded (mut i32) (i32.const 0)) + (global $std/encoding/decoded2 (mut i32) (i32.const 0)) + (global $std/encoding/decoded3 (mut i32) (i32.const 0)) + (global $std/encoding/decoded64 (mut i64) (i64.const 0)) + (global $std/encoding/compactDecoded (mut i64) (i64.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33868)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00\1e\00\00\00s\00t\00d\00/\00e\00n\00c\00o\00d\00i\00n\00g\00.\00t\00s") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1100 + i32.lt_s + if + i32.const 33888 + i32.const 33936 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:std/encoding + ) + (func $start:std/encoding + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 i64) + (local $6 i32) + i32.const 8192 + i32.const 48 + i32.store8 + i32.const 8193 + i32.const 48 + i32.store8 + i32.const 8192 + i32.load8_u + i32.const 48 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 11 + call $~lib/builtins/abort + unreachable + end + i32.const 8193 + i32.load8_u + i32.const 48 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 12 + call $~lib/builtins/abort + unreachable + end + i32.const 8196 + i32.const 102 + i32.store8 + i32.const 8197 + i32.const 102 + i32.store8 + i32.const 8196 + i32.load8_u + i32.const 102 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 15 + call $~lib/builtins/abort + unreachable + end + i32.const 8197 + i32.load8_u + i32.const 102 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + i32.const 8200 + i32.const 97 + i32.store8 + i32.const 8201 + i32.const 98 + i32.store8 + i32.const 8200 + i32.load8_u + i32.const 97 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + i32.const 8201 + i32.load8_u + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + i32.const 8204 + i32.const 49 + i32.store8 + i32.const 8205 + i32.const 102 + i32.store8 + i32.const 8204 + i32.load8_u + i32.const 49 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 23 + call $~lib/builtins/abort + unreachable + end + i32.const 8205 + i32.load8_u + i32.const 102 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + i32.const 8448 + i32.const 48 + i32.store8 + i32.const 8449 + i32.const 48 + i32.store8 + i32.const 8448 + i32.load8_u + local.tee $1 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + local.get $1 + i32.const 57 + i32.le_u + local.get $1 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + local.get $1 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 102 + i32.le_u + local.get $1 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + local.get $1 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 70 + i32.le_u + local.get $1 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.0 + i32.const -1 + local.set $0 + end + local.get $0 + local.set $1 + i32.const 8449 + i32.load8_u + local.tee $2 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + local.get $2 + i32.const 57 + i32.le_u + local.get $2 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + local.get $2 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 102 + i32.le_u + local.get $2 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + local.get $2 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 70 + i32.le_u + local.get $2 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.1 + i32.const -1 + local.set $0 + end + i32.const -1 + local.get $0 + local.get $1 + i32.const 4 + i32.shl + i32.or + local.get $0 + local.get $1 + i32.or + i32.const 0 + i32.lt_s + select + if + i32.const 0 + i32.const 1056 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + i32.const 8450 + i32.const 102 + i32.store8 + i32.const 8451 + i32.const 102 + i32.store8 + i32.const 8450 + i32.load8_u + local.tee $1 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + local.get $1 + i32.const 57 + i32.le_u + local.get $1 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + local.get $1 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 102 + i32.le_u + local.get $1 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + local.get $1 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 70 + i32.le_u + local.get $1 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.2 + i32.const -1 + local.set $0 + end + local.get $0 + local.set $1 + i32.const 8451 + i32.load8_u + local.tee $2 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + local.get $2 + i32.const 57 + i32.le_u + local.get $2 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + local.get $2 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 102 + i32.le_u + local.get $2 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + local.get $2 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 70 + i32.le_u + local.get $2 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.3 + i32.const -1 + local.set $0 + end + i32.const -1 + local.get $0 + local.get $1 + i32.const 4 + i32.shl + i32.or + local.get $0 + local.get $1 + i32.or + i32.const 0 + i32.lt_s + select + i32.const 255 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + i32.const 8452 + i32.const 65 + i32.store8 + i32.const 8453 + i32.const 66 + i32.store8 + i32.const 8452 + i32.load8_u + local.tee $1 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + local.get $1 + i32.const 57 + i32.le_u + local.get $1 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + local.get $1 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 102 + i32.le_u + local.get $1 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + local.get $1 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 70 + i32.le_u + local.get $1 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.4 + i32.const -1 + local.set $0 + end + local.get $0 + local.set $1 + i32.const 8453 + i32.load8_u + local.tee $2 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + local.get $2 + i32.const 57 + i32.le_u + local.get $2 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + local.get $2 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 102 + i32.le_u + local.get $2 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + local.get $2 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 70 + i32.le_u + local.get $2 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.5 + i32.const -1 + local.set $0 + end + i32.const -1 + local.get $0 + local.get $1 + i32.const 4 + i32.shl + i32.or + local.get $0 + local.get $1 + i32.or + i32.const 0 + i32.lt_s + select + i32.const 171 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 35 + call $~lib/builtins/abort + unreachable + end + i32.const 8456 + i32.const 103 + i32.store8 + i32.const 8457 + i32.const 48 + i32.store8 + i32.const 8456 + i32.load8_u + local.tee $1 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + local.get $1 + i32.const 57 + i32.le_u + local.get $1 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + local.get $1 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 102 + i32.le_u + local.get $1 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + local.get $1 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $1 + i32.const 70 + i32.le_u + local.get $1 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.6 + i32.const -1 + local.set $0 + end + local.get $0 + local.set $1 + i32.const 8457 + i32.load8_u + local.tee $2 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $0 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + local.get $2 + i32.const 57 + i32.le_u + local.get $2 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + local.get $2 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 102 + i32.le_u + local.get $2 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + local.get $2 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $0 + local.get $2 + i32.const 70 + i32.le_u + local.get $2 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.7 + i32.const -1 + local.set $0 + end + i32.const -1 + local.get $0 + local.get $1 + i32.const 4 + i32.shl + i32.or + local.get $0 + local.get $1 + i32.or + i32.const 0 + i32.lt_s + select + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 39 + call $~lib/builtins/abort + unreachable + end + i32.const 8536 + i32.const 222 + i32.store8 + i32.const 8537 + i32.const 173 + i32.store8 + i32.const 8538 + i32.const 190 + i32.store8 + i32.const 8539 + i32.const 239 + i32.store8 + loop $for-loop|0 + local.get $3 + i32.const 4 + i32.lt_s + if + local.get $3 + i32.const 1 + i32.shl + i32.const 8636 + i32.add + local.tee $2 + local.get $3 + i32.const 8536 + i32.add + i32.load8_u + local.tee $1 + i32.const 4 + i32.shr_u + local.tee $0 + i32.const 48 + i32.add + local.get $0 + i32.const 87 + i32.add + local.get $0 + i32.const 10 + i32.lt_u + select + i32.store8 + local.get $2 + local.get $1 + i32.const 15 + i32.and + local.tee $0 + i32.const 48 + i32.add + local.get $0 + i32.const 87 + i32.add + local.get $0 + i32.const 10 + i32.lt_u + select + i32.store8 offset=1 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + i32.const 0 + local.set $0 + block $~lib/encoding/Encoding.Hex.decode|inlined.0 (result i32) + loop $for-loop|1 + local.get $0 + i32.const 4 + i32.lt_s + if + local.get $0 + i32.const 1 + i32.shl + i32.const 8636 + i32.add + local.tee $3 + i32.load8_u + local.tee $1 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $2 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + local.get $1 + i32.const 57 + i32.le_u + local.get $1 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + local.get $1 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $2 + local.get $1 + i32.const 102 + i32.le_u + local.get $1 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + local.get $1 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $2 + local.get $1 + i32.const 70 + i32.le_u + local.get $1 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.8 + i32.const -1 + local.set $2 + end + local.get $2 + local.set $1 + local.get $3 + i32.load8_u offset=1 + local.tee $3 + i32.const 48 + i32.sub + i32.const 255 + i32.and + local.set $2 + block $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + local.get $3 + i32.const 57 + i32.le_u + local.get $3 + i32.const 48 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + local.get $3 + i32.const 87 + i32.sub + i32.const 255 + i32.and + local.set $2 + local.get $3 + i32.const 102 + i32.le_u + local.get $3 + i32.const 97 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + local.get $3 + i32.const 55 + i32.sub + i32.const 255 + i32.and + local.set $2 + local.get $3 + i32.const 70 + i32.le_u + local.get $3 + i32.const 65 + i32.ge_u + i32.and + br_if $~lib/encoding/Encoding.Hex.decodeNibble|inlined.9 + i32.const -1 + local.set $2 + end + i32.const -1 + i32.const -1 + local.get $2 + local.get $1 + i32.const 4 + i32.shl + i32.or + local.get $1 + local.get $2 + i32.or + i32.const 0 + i32.lt_s + select + local.tee $1 + i32.const 0 + i32.lt_s + br_if $~lib/encoding/Encoding.Hex.decode|inlined.0 + drop + local.get $0 + i32.const 8736 + i32.add + local.get $1 + i32.store8 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + i32.const 4 + end + global.set $std/encoding/decLen + global.get $std/encoding/decLen + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 53 + call $~lib/builtins/abort + unreachable + end + i32.const 8736 + i32.load8_u + i32.const 222 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 54 + call $~lib/builtins/abort + unreachable + end + i32.const 8737 + i32.load8_u + i32.const 173 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 55 + call $~lib/builtins/abort + unreachable + end + i32.const 8738 + i32.load8_u + i32.const 190 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 56 + call $~lib/builtins/abort + unreachable + end + i32.const 8739 + i32.load8_u + i32.const 239 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 57 + call $~lib/builtins/abort + unreachable + end + i32.const 8960 + global.set $std/encoding/bytesRead + i32.const 0 + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|3 + local.get $3 + i32.const 128 + i32.ge_u + if + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $3 + i32.const 7 + i32.shr_u + local.set $3 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $while-continue|3 + end + end + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.store8 + local.get $0 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 73 + call $~lib/builtins/abort + unreachable + end + i32.const 9036 + i32.load8_u + if + i32.const 0 + i32.const 1056 + i32.const 74 + call $~lib/builtins/abort + unreachable + end + i32.const 127 + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|4 + local.get $3 + i32.const 128 + i32.ge_u + if + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $3 + i32.const 7 + i32.shr_u + local.set $3 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $while-continue|4 + end + end + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.store8 + local.get $0 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 77 + call $~lib/builtins/abort + unreachable + end + i32.const 9036 + i32.load8_u + i32.const 127 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 78 + call $~lib/builtins/abort + unreachable + end + i32.const 128 + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|5 + local.get $3 + i32.const 128 + i32.ge_u + if + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $3 + i32.const 7 + i32.shr_u + local.set $3 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $while-continue|5 + end + end + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.store8 + local.get $0 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 82 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.const 0 + local.set $0 + i32.const 0 + local.set $3 + loop $do-loop|6 + block $do-break|6 + local.get $0 + local.get $3 + i32.const 9036 + i32.add + i32.load8_u + local.tee $1 + i32.const 127 + i32.and + local.get $6 + i32.shl + i32.or + local.set $0 + local.get $6 + i32.const 7 + i32.add + local.set $6 + local.get $3 + i32.const 1 + i32.add + local.tee $3 + i32.const 5 + i32.ge_s + br_if $do-break|6 + local.get $1 + i32.const 128 + i32.and + br_if $do-loop|6 + end + end + local.get $3 + i32.store + local.get $0 + global.set $std/encoding/decoded + global.get $std/encoding/decoded + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 84 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 85 + call $~lib/builtins/abort + unreachable + end + i32.const 300 + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|7 + local.get $3 + i32.const 128 + i32.ge_u + if + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $3 + i32.const 7 + i32.shr_u + local.set $3 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $while-continue|7 + end + end + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.store8 + local.get $0 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/bytesRead + i32.const 0 + local.set $0 + i32.const 0 + local.set $6 + i32.const 0 + local.set $3 + loop $do-loop|8 + block $do-break|8 + local.get $0 + local.get $3 + i32.const 9036 + i32.add + i32.load8_u + local.tee $1 + i32.const 127 + i32.and + local.get $6 + i32.shl + i32.or + local.set $0 + local.get $6 + i32.const 7 + i32.add + local.set $6 + local.get $3 + i32.const 1 + i32.add + local.tee $3 + i32.const 5 + i32.ge_s + br_if $do-break|8 + local.get $1 + i32.const 128 + i32.and + br_if $do-loop|8 + end + end + local.get $3 + i32.store + local.get $0 + global.set $std/encoding/decoded2 + global.get $std/encoding/decoded2 + i32.const 300 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 89 + call $~lib/builtins/abort + unreachable + end + i32.const -1 + local.set $3 + i32.const 0 + local.set $0 + loop $while-continue|9 + local.get $3 + i32.const 128 + i32.ge_u + if + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.const 127 + i32.and + i32.const 128 + i32.or + i32.store8 + local.get $3 + i32.const 7 + i32.shr_u + local.set $3 + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $while-continue|9 + end + end + local.get $0 + i32.const 9036 + i32.add + local.get $3 + i32.store8 + local.get $0 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/written + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 93 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.const 0 + local.set $0 + i32.const 0 + local.set $6 + i32.const 0 + local.set $3 + loop $do-loop|10 + block $do-break|10 + local.get $0 + local.get $3 + i32.const 9036 + i32.add + i32.load8_u + local.tee $1 + i32.const 127 + i32.and + local.get $6 + i32.shl + i32.or + local.set $0 + local.get $6 + i32.const 7 + i32.add + local.set $6 + local.get $3 + i32.const 1 + i32.add + local.tee $3 + i32.const 5 + i32.ge_s + br_if $do-break|10 + local.get $1 + i32.const 128 + i32.and + br_if $do-loop|10 + end + end + local.get $3 + i32.store + local.get $0 + global.set $std/encoding/decoded3 + global.get $std/encoding/decoded3 + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 95 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 96 + call $~lib/builtins/abort + unreachable + end + i64.const 72623859790382856 + local.set $5 + i32.const 0 + local.set $3 + loop $while-continue|11 + local.get $5 + i64.const 128 + i64.ge_u + if + local.get $3 + i32.const 9136 + i32.add + local.get $5 + i64.const 127 + i64.and + i32.wrap_i64 + i32.const 128 + i32.or + i32.store8 + local.get $5 + i64.const 7 + i64.shr_u + local.set $5 + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $while-continue|11 + end + end + local.get $3 + i32.const 9136 + i32.add + local.get $5 + i64.store8 + local.get $3 + i32.const 1 + i32.add + global.set $std/encoding/written + global.get $std/encoding/bytesRead + i64.const 0 + local.set $5 + i32.const 0 + local.set $3 + loop $do-loop|12 + block $do-break|12 + local.get $5 + local.get $3 + i32.const 9136 + i32.add + i32.load8_u + local.tee $0 + i32.const 127 + i32.and + i64.extend_i32_u + local.get $4 + i64.shl + i64.or + local.set $5 + local.get $4 + i64.const 7 + i64.add + local.set $4 + local.get $3 + i32.const 1 + i32.add + local.tee $3 + i32.const 10 + i32.ge_s + br_if $do-break|12 + local.get $0 + i32.const 128 + i32.and + br_if $do-loop|12 + end + end + local.get $3 + i32.store + local.get $5 + global.set $std/encoding/decoded64 + global.get $std/encoding/decoded64 + i64.const 72623859790382856 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 102 + call $~lib/builtins/abort + unreachable + end + i32.const 9236 + i64.const 252 + i64.store8 + i32.const 1 + global.set $std/encoding/written + global.get $std/encoding/bytesRead + local.set $1 + i32.const 9236 + i32.load8_u + local.tee $0 + i32.const 253 + i32.lt_u + if (result i64) + local.get $1 + i32.const 1 + i32.store + local.get $0 + i64.extend_i32_u + else + local.get $0 + i32.const 253 + i32.eq + if (result i64) + local.get $1 + i32.const 3 + i32.store + i32.const 9237 + i64.load16_u + else + local.get $0 + i32.const 254 + i32.eq + if (result i64) + local.get $1 + i32.const 5 + i32.store + i32.const 9237 + i64.load32_u + else + local.get $1 + i32.const 9 + i32.store + i32.const 9237 + i64.load + end + end + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 252 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 112 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 113 + call $~lib/builtins/abort + unreachable + end + i32.const 9236 + i32.const 253 + i32.store8 + i32.const 9237 + i64.const 253 + i64.store16 + i32.const 3 + global.set $std/encoding/written + global.get $std/encoding/bytesRead + local.set $1 + i32.const 9236 + i32.load8_u + local.tee $0 + i32.const 253 + i32.lt_u + if (result i64) + local.get $1 + i32.const 1 + i32.store + local.get $0 + i64.extend_i32_u + else + local.get $0 + i32.const 253 + i32.eq + if (result i64) + local.get $1 + i32.const 3 + i32.store + i32.const 9237 + i64.load16_u + else + local.get $0 + i32.const 254 + i32.eq + if (result i64) + local.get $1 + i32.const 5 + i32.store + i32.const 9237 + i64.load32_u + else + local.get $1 + i32.const 9 + i32.store + i32.const 9237 + i64.load + end + end + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 253 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 119 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 120 + call $~lib/builtins/abort + unreachable + end + i32.const 9236 + i32.const 253 + i32.store8 + i32.const 9237 + i64.const 65535 + i64.store16 + i32.const 3 + global.set $std/encoding/written + global.get $std/encoding/bytesRead + local.set $1 + i32.const 9236 + i32.load8_u + local.tee $0 + i32.const 253 + i32.lt_u + if (result i64) + local.get $1 + i32.const 1 + i32.store + local.get $0 + i64.extend_i32_u + else + local.get $0 + i32.const 253 + i32.eq + if (result i64) + local.get $1 + i32.const 3 + i32.store + i32.const 9237 + i64.load16_u + else + local.get $0 + i32.const 254 + i32.eq + if (result i64) + local.get $1 + i32.const 5 + i32.store + i32.const 9237 + i64.load32_u + else + local.get $1 + i32.const 9 + i32.store + i32.const 9237 + i64.load + end + end + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 65535 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 125 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 126 + call $~lib/builtins/abort + unreachable + end + i32.const 9236 + i32.const 254 + i32.store8 + i32.const 9237 + i64.const 65536 + i64.store32 + i32.const 5 + global.set $std/encoding/written + global.get $std/encoding/bytesRead + local.set $1 + i32.const 9236 + i32.load8_u + local.tee $0 + i32.const 253 + i32.lt_u + if (result i64) + local.get $1 + i32.const 1 + i32.store + local.get $0 + i64.extend_i32_u + else + local.get $0 + i32.const 253 + i32.eq + if (result i64) + local.get $1 + i32.const 3 + i32.store + i32.const 9237 + i64.load16_u + else + local.get $0 + i32.const 254 + i32.eq + if (result i64) + local.get $1 + i32.const 5 + i32.store + i32.const 9237 + i64.load32_u + else + local.get $1 + i32.const 9 + i32.store + i32.const 9237 + i64.load + end + end + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 65536 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 132 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 133 + call $~lib/builtins/abort + unreachable + end + i32.const 9236 + i32.const 255 + i32.store8 + i32.const 9237 + i64.const 4294967296 + i64.store + i32.const 9 + global.set $std/encoding/written + global.get $std/encoding/bytesRead + local.set $1 + i32.const 9236 + i32.load8_u + local.tee $0 + i32.const 253 + i32.lt_u + if (result i64) + local.get $1 + i32.const 1 + i32.store + local.get $0 + i64.extend_i32_u + else + local.get $0 + i32.const 253 + i32.eq + if (result i64) + local.get $1 + i32.const 3 + i32.store + i32.const 9237 + i64.load16_u + else + local.get $0 + i32.const 254 + i32.eq + if (result i64) + local.get $1 + i32.const 5 + i32.store + i32.const 9237 + i64.load32_u + else + local.get $1 + i32.const 9 + i32.store + i32.const 9237 + i64.load + end + end + end + global.set $std/encoding/compactDecoded + global.get $std/encoding/compactDecoded + i64.const 4294967296 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 139 + call $~lib/builtins/abort + unreachable + end + global.get $std/encoding/bytesRead + i32.load + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 140 + call $~lib/builtins/abort + unreachable + end + ) +) diff --git a/tests/compiler/std/encoding.ts b/tests/compiler/std/encoding.ts new file mode 100644 index 0000000000..1c0fb8a623 --- /dev/null +++ b/tests/compiler/std/encoding.ts @@ -0,0 +1,140 @@ +import { Encoding } from "encoding"; +import { Pointer } from "pointer"; + +// Use high addresses to avoid overlap with heap/static data +const BASE: usize = 8192; + +// --- Hex encoding --- + +// encodeByte +Encoding.Hex.encodeByte(0x00, BASE); +assert(load(BASE) == 48); // '0' +assert(load(BASE + 1) == 48); // '0' + +Encoding.Hex.encodeByte(0xFF, BASE + 4); +assert(load(BASE + 4) == 102); // 'f' +assert(load(BASE + 5) == 102); // 'f' + +Encoding.Hex.encodeByte(0xAB, BASE + 8); +assert(load(BASE + 8) == 97); // 'a' +assert(load(BASE + 9) == 98); // 'b' + +Encoding.Hex.encodeByte(0x1F, BASE + 12); +assert(load(BASE + 12) == 49); // '1' +assert(load(BASE + 13) == 102); // 'f' + +// decodeByte +const DB: usize = BASE + 256; +store(DB, 48); store(DB + 1, 48); // "00" +assert(Encoding.Hex.decodeByte(DB) == 0x00); + +store(DB + 2, 102); store(DB + 3, 102); // "ff" +assert(Encoding.Hex.decodeByte(DB + 2) == 0xFF); + +store(DB + 4, 65); store(DB + 5, 66); // "AB" (uppercase) +assert(Encoding.Hex.decodeByte(DB + 4) == 0xAB); + +// Invalid hex +store(DB + 8, 103); store(DB + 9, 48); // "g0" +assert(Encoding.Hex.decodeByte(DB + 8) == -1); + +// encode / decode multi-byte +const SRC: usize = BASE + 344; +const HEX: usize = BASE + 444; +const DEC: usize = BASE + 544; +store(SRC, 0xDE); +store(SRC + 1, 0xAD); +store(SRC + 2, 0xBE); +store(SRC + 3, 0xEF); +let hexLen = Encoding.Hex.encode(SRC, 4, HEX); +assert(hexLen == 8); + +let decLen = Encoding.Hex.decode(HEX, 8, DEC); +assert(decLen == 4); +assert(load(DEC) == 0xDE); +assert(load(DEC + 1) == 0xAD); +assert(load(DEC + 2) == 0xBE); +assert(load(DEC + 3) == 0xEF); + +// Odd-length decode returns -1 +assert(Encoding.Hex.decode(HEX, 7, DEC + 100) == -1); + +// --- LEB128 Varint --- + +const BR: usize = BASE + 768; // bytesRead location +const VB: usize = BASE + 844; // varint buffer + +let bytesRead = new Pointer(BR); + +// encodeU32 / decodeU32 + +// Single-byte encoding (0-127) +let written = Encoding.Varint.encodeU32(0, VB); +assert(written == 1); +assert(load(VB) == 0); + +written = Encoding.Varint.encodeU32(127, VB); +assert(written == 1); +assert(load(VB) == 127); + +// Multi-byte encoding +written = Encoding.Varint.encodeU32(128, VB); +assert(written == 2); +let decoded = Encoding.Varint.decodeU32(VB, bytesRead); +assert(decoded == 128); +assert(bytesRead.value == 2); + +written = Encoding.Varint.encodeU32(300, VB); +let decoded2 = Encoding.Varint.decodeU32(VB, bytesRead); +assert(decoded2 == 300); + +// Large value +written = Encoding.Varint.encodeU32(0xFFFFFFFF, VB); +assert(written == 5); +let decoded3 = Encoding.Varint.decodeU32(VB, bytesRead); +assert(decoded3 == 0xFFFFFFFF); +assert(bytesRead.value == 5); + +// encodeU64 / decodeU64 +const VB64: usize = BASE + 944; +written = Encoding.Varint.encodeU64(0x0102030405060708, VB64); +let decoded64 = Encoding.Varint.decodeU64(VB64, bytesRead); +assert(decoded64 == 0x0102030405060708); + +// --- Bitcoin CompactSize --- + +const CB: usize = BASE + 1044; + +// Single byte (< 0xFD) +written = Encoding.Varint.encodeCompact(0xFC, CB); +assert(written == 1); +let compactDecoded = Encoding.Varint.decodeCompact(CB, bytesRead); +assert(compactDecoded == 0xFC); +assert(bytesRead.value == 1); + +// 2-byte (0xFD prefix) +written = Encoding.Varint.encodeCompact(0xFD, CB); +assert(written == 3); +compactDecoded = Encoding.Varint.decodeCompact(CB, bytesRead); +assert(compactDecoded == 0xFD); +assert(bytesRead.value == 3); + +written = Encoding.Varint.encodeCompact(0xFFFF, CB); +assert(written == 3); +compactDecoded = Encoding.Varint.decodeCompact(CB, bytesRead); +assert(compactDecoded == 0xFFFF); +assert(bytesRead.value == 3); + +// 4-byte (0xFE prefix) +written = Encoding.Varint.encodeCompact(0x10000, CB); +assert(written == 5); +compactDecoded = Encoding.Varint.decodeCompact(CB, bytesRead); +assert(compactDecoded == 0x10000); +assert(bytesRead.value == 5); + +// 8-byte (0xFF prefix) +written = Encoding.Varint.encodeCompact(0x100000000, CB); +assert(written == 9); +compactDecoded = Encoding.Varint.decodeCompact(CB, bytesRead); +assert(compactDecoded == 0x100000000); +assert(bytesRead.value == 9); diff --git a/tests/compiler/std/endian.debug.wat b/tests/compiler/std/endian.debug.wat new file mode 100644 index 0000000000..c92d31e1a2 --- /dev/null +++ b/tests/compiler/std/endian.debug.wat @@ -0,0 +1,689 @@ +(module + (type $0 (func (param i32) (result i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i64) (result i64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $std/endian/BASE i32 (i32.const 8192)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/memory/__data_end i32 (i32.const 60)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) + (global $~lib/memory/__heap_base i32 (i32.const 32828)) + (memory $0 1) + (data $0 (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00s\00t\00d\00/\00e\00n\00d\00i\00a\00n\00.\00t\00s\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 2 + i32.const 1 + i32.eq + drop + i32.const 2 + i32.const 2 + i32.eq + drop + local.get $value + i32.const 8 + i32.const 15 + i32.and + i32.shl + local.get $value + i32.const 65535 + i32.and + i32.const 8 + i32.const 15 + i32.and + i32.shr_u + i32.or + return + ) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $value + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $value + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $~lib/polyfills/bswap (param $value i64) (result i64) + (local $a i64) + (local $b i64) + (local $v i64) + i32.const 1 + drop + i32.const 8 + i32.const 1 + i32.eq + drop + i32.const 8 + i32.const 2 + i32.eq + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + local.get $value + i64.const 8 + i64.shr_u + i64.const 71777214294589695 + i64.and + local.set $a + local.get $value + i64.const 71777214294589695 + i64.and + i64.const 8 + i64.shl + local.set $b + local.get $a + local.get $b + i64.or + local.set $v + local.get $v + i64.const 16 + i64.shr_u + i64.const 281470681808895 + i64.and + local.set $a + local.get $v + i64.const 281470681808895 + i64.and + i64.const 16 + i64.shl + local.set $b + local.get $a + local.get $b + i64.or + i64.const 32 + i64.rotr + return + ) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 4 + i32.const 1 + i32.eq + drop + i32.const 4 + i32.const 2 + i32.eq + drop + i32.const 4 + i32.const 4 + i32.eq + drop + local.get $value + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $value + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + return + ) + (func $~lib/polyfills/bswap (param $value i32) (result i32) + i32.const 1 + drop + i32.const 2 + i32.const 1 + i32.eq + drop + i32.const 2 + i32.const 2 + i32.eq + drop + local.get $value + i32.const 8 + i32.const 15 + i32.and + i32.shl + local.get $value + i32.const 65535 + i32.and + i32.const 8 + i32.const 15 + i32.and + i32.shr_u + i32.or + return + ) + (func $start:std/endian + (local $value i32) + (local $value|1 i32) + (local $value|2 i64) + (local $value|3 i32) + (local $value|4 i32) + (local $value|5 i64) + (local $value|6 i32) + (local $value|7 i64) + (local $ptr i32) + (local $offset i32) + (local $ptr|10 i32) + (local $offset|11 i32) + (local $ptr|12 i32) + (local $value|13 i32) + (local $offset|14 i32) + (local $ptr|15 i32) + (local $value|16 i32) + (local $offset|17 i32) + (local $ptr|18 i32) + (local $value|19 i32) + (local $offset|20 i32) + (local $ptr|21 i32) + (local $offset|22 i32) + (local $ptr|23 i32) + (local $value|24 i64) + (local $offset|25 i32) + (local $ptr|26 i32) + (local $offset|27 i32) + (local $value|28 i32) + (local $value|29 i32) + (local $ptr|30 i32) + (local $value|31 i32) + (local $offset|32 i32) + (local $ptr|33 i32) + (local $offset|34 i32) + block $~lib/endian/Endian.toBE|inlined.0 (result i32) + i32.const 258 + local.set $value + local.get $value + call $~lib/polyfills/bswap + br $~lib/endian/Endian.toBE|inlined.0 + end + i32.const 65535 + i32.and + i32.const 513 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 7 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.toBE|inlined.0 (result i32) + i32.const 16909060 + local.set $value|1 + local.get $value|1 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.toBE|inlined.0 + end + i32.const 67305985 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 8 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.toBE|inlined.0 (result i64) + i64.const 72623859790382856 + local.set $value|2 + local.get $value|2 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.toBE|inlined.0 + end + i64.const 578437695752307201 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 9 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.fromBE|inlined.0 (result i32) + i32.const 513 + local.set $value|3 + local.get $value|3 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.fromBE|inlined.0 + end + i32.const 65535 + i32.and + i32.const 258 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 10 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.fromBE|inlined.0 (result i32) + i32.const 67305985 + local.set $value|4 + local.get $value|4 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.fromBE|inlined.0 + end + i32.const 16909060 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 11 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.fromBE|inlined.0 (result i64) + i64.const 578437695752307201 + local.set $value|5 + local.get $value|5 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.fromBE|inlined.0 + end + i64.const 72623859790382856 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 12 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.toLE|inlined.0 (result i32) + i32.const -559038737 + local.set $value|6 + local.get $value|6 + br $~lib/endian/Endian.toLE|inlined.0 + end + i32.const -559038737 + i32.eq + drop + block $~lib/endian/Endian.fromLE|inlined.0 (result i64) + i64.const 1311768467294899695 + local.set $value|7 + local.get $value|7 + br $~lib/endian/Endian.fromLE|inlined.0 + end + i64.const 1311768467294899695 + i64.eq + drop + global.get $std/endian/BASE + i32.const 16909060 + i32.store + block $~lib/endian/Endian.loadBE|inlined.0 (result i32) + global.get $std/endian/BASE + local.set $ptr + i32.const 0 + local.set $offset + local.get $ptr + local.get $offset + i32.add + i32.load + call $~lib/polyfills/bswap + br $~lib/endian/Endian.loadBE|inlined.0 + end + i32.const 67305985 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 20 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.loadLE|inlined.0 (result i32) + global.get $std/endian/BASE + local.set $ptr|10 + i32.const 0 + local.set $offset|11 + local.get $ptr|10 + local.get $offset|11 + i32.add + i32.load + br $~lib/endian/Endian.loadLE|inlined.0 + end + i32.const 16909060 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 8 + i32.add + local.set $ptr|12 + i32.const 16909060 + local.set $value|13 + i32.const 0 + local.set $offset|14 + local.get $ptr|12 + local.get $offset|14 + i32.add + local.get $value|13 + call $~lib/polyfills/bswap + i32.store + global.get $std/endian/BASE + i32.const 8 + i32.add + i32.load + i32.const 67305985 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 24 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 16 + i32.add + local.set $ptr|15 + i32.const -1430532899 + local.set $value|16 + i32.const 0 + local.set $offset|17 + local.get $ptr|15 + local.get $offset|17 + i32.add + local.get $value|16 + i32.store + global.get $std/endian/BASE + i32.const 16 + i32.add + i32.load + i32.const -1430532899 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 27 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 32 + i32.add + local.set $ptr|18 + i32.const 258 + local.set $value|19 + i32.const 0 + local.set $offset|20 + local.get $ptr|18 + local.get $offset|20 + i32.add + local.get $value|19 + call $~lib/polyfills/bswap + i32.store16 + global.get $std/endian/BASE + i32.const 32 + i32.add + i32.load16_u + i32.const 513 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 31 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.loadBE|inlined.0 (result i32) + global.get $std/endian/BASE + i32.const 32 + i32.add + local.set $ptr|21 + i32.const 0 + local.set $offset|22 + local.get $ptr|21 + local.get $offset|22 + i32.add + i32.load16_u + call $~lib/polyfills/bswap + br $~lib/endian/Endian.loadBE|inlined.0 + end + i32.const 65535 + i32.and + i32.const 258 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 32 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 48 + i32.add + local.set $ptr|23 + i64.const 72623859790382856 + local.set $value|24 + i32.const 0 + local.set $offset|25 + local.get $ptr|23 + local.get $offset|25 + i32.add + local.get $value|24 + call $~lib/polyfills/bswap + i64.store + block $~lib/endian/Endian.loadBE|inlined.0 (result i64) + global.get $std/endian/BASE + i32.const 48 + i32.add + local.set $ptr|26 + i32.const 0 + local.set $offset|27 + local.get $ptr|26 + local.get $offset|27 + i32.add + i64.load + call $~lib/polyfills/bswap + br $~lib/endian/Endian.loadBE|inlined.0 + end + i64.const 72623859790382856 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 36 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 48 + i32.add + i64.load + i64.const 578437695752307201 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 37 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.toBE|inlined.0 (result i32) + i32.const 16909060 + local.set $value|28 + local.get $value|28 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.toBE|inlined.0 + end + i32.const 67305985 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 40 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/endian/Endian.toBE|inlined.0 (result i32) + i32.const 258 + local.set $value|29 + local.get $value|29 + call $~lib/polyfills/bswap + br $~lib/endian/Endian.toBE|inlined.0 + end + i32.extend16_s + i32.const 513 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 41 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/endian/BASE + i32.const 64 + i32.add + local.set $ptr|30 + i32.const -559038737 + local.set $value|31 + i32.const 0 + local.set $offset|32 + local.get $ptr|30 + local.get $offset|32 + i32.add + local.get $value|31 + call $~lib/polyfills/bswap + i32.store + block $~lib/endian/Endian.loadBE|inlined.1 (result i32) + global.get $std/endian/BASE + i32.const 60 + i32.add + local.set $ptr|33 + i32.const 4 + local.set $offset|34 + local.get $ptr|33 + local.get $offset|34 + i32.add + i32.load + call $~lib/polyfills/bswap + br $~lib/endian/Endian.loadBE|inlined.1 + end + i32.const -559038737 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 45 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~start + call $start:std/endian + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/std/endian.json b/tests/compiler/std/endian.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/endian.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/endian.release.wat b/tests/compiler/std/endian.release.wat new file mode 100644 index 0000000000..59ede128a2 --- /dev/null +++ b/tests/compiler/std/endian.release.wat @@ -0,0 +1,222 @@ +(module + (type $0 (func (param i32 i32 i32))) + (type $1 (func)) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) + (memory $0 1) + (data $0 (i32.const 1036) ",") + (data $0.1 (i32.const 1048) "\02\00\00\00\1a\00\00\00s\00t\00d\00/\00e\00n\00d\00i\00a\00n\00.\00t\00s") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + (local $0 i32) + (local $1 i64) + i32.const 8192 + i32.const 16909060 + i32.store + i32.const 8192 + i32.load + local.tee $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + i32.const 67305985 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + i32.const 8192 + i32.load + i32.const 16909060 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + i32.const 8200 + i32.const 67305985 + i32.store + i32.const 8200 + i32.load + i32.const 67305985 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 24 + call $~lib/builtins/abort + unreachable + end + i32.const 8208 + i32.const -1430532899 + i32.store + i32.const 8208 + i32.load + i32.const -1430532899 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 27 + call $~lib/builtins/abort + unreachable + end + i32.const 8224 + i32.const 513 + i32.store16 + i32.const 8224 + i32.load16_u + i32.const 513 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + i32.const 8224 + i32.load16_u + local.tee $0 + i32.const 8 + i32.shl + local.get $0 + i32.const 8 + i32.shr_u + i32.or + i32.const 65535 + i32.and + i32.const 258 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + i32.const 8240 + i64.const 578437695752307201 + i64.store + i32.const 8240 + i64.load + local.tee $1 + i64.const 8 + i64.shr_u + i64.const 71777214294589695 + i64.and + local.get $1 + i64.const 71777214294589695 + i64.and + i64.const 8 + i64.shl + i64.or + local.tee $1 + i64.const 16 + i64.shr_u + i64.const 281470681808895 + i64.and + local.get $1 + i64.const 281470681808895 + i64.and + i64.const 16 + i64.shl + i64.or + i64.const 32 + i64.rotr + i64.const 72623859790382856 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 36 + call $~lib/builtins/abort + unreachable + end + i32.const 8240 + i64.load + i64.const 578437695752307201 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 37 + call $~lib/builtins/abort + unreachable + end + i32.const 8256 + i32.const -272716322 + i32.store + i32.const 8256 + i32.load + local.tee $0 + i32.const -16711936 + i32.and + i32.const 8 + i32.rotl + local.get $0 + i32.const 16711935 + i32.and + i32.const 8 + i32.rotr + i32.or + i32.const -559038737 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 45 + call $~lib/builtins/abort + unreachable + end + ) +) diff --git a/tests/compiler/std/endian.ts b/tests/compiler/std/endian.ts new file mode 100644 index 0000000000..23777f66f2 --- /dev/null +++ b/tests/compiler/std/endian.ts @@ -0,0 +1,45 @@ +import { Endian } from "endian"; + +// Use high addresses to avoid overlap with heap/static data +const BASE: usize = 8192; + +// Test toBE / fromBE (bswap) +assert(Endian.toBE(0x0102) == 0x0201); +assert(Endian.toBE(0x01020304) == 0x04030201); +assert(Endian.toBE(0x0102030405060708) == 0x0807060504030201); +assert(Endian.fromBE(0x0201) == 0x0102); +assert(Endian.fromBE(0x04030201) == 0x01020304); +assert(Endian.fromBE(0x0807060504030201) == 0x0102030405060708); + +// Test toLE / fromLE (identity) +assert(Endian.toLE(0xDEADBEEF) == 0xDEADBEEF); +assert(Endian.fromLE(0x1234567890ABCDEF) == 0x1234567890ABCDEF); + +// Test loadBE / storeBE with memory +store(BASE, 0x01020304); +assert(Endian.loadBE(BASE) == 0x04030201); +assert(Endian.loadLE(BASE) == 0x01020304); + +Endian.storeBE(BASE + 8, 0x01020304); +assert(load(BASE + 8) == 0x04030201); + +Endian.storeLE(BASE + 16, 0xAABBCCDD); +assert(load(BASE + 16) == 0xAABBCCDD); + +// Test with offsets +Endian.storeBE(BASE + 32, 0x0102); +assert(load(BASE + 32) == 0x0201); +assert(Endian.loadBE(BASE + 32) == 0x0102); + +// Test 64-bit +Endian.storeBE(BASE + 48, 0x0102030405060708); +assert(Endian.loadBE(BASE + 48) == 0x0102030405060708); +assert(load(BASE + 48) == 0x0807060504030201); + +// Test signed types +assert(Endian.toBE(0x01020304) == 0x04030201); +assert(Endian.toBE(0x0102) == 0x0201); + +// Test offset parameter +Endian.storeBE(BASE + 64, 0xDEADBEEF); +assert(Endian.loadBE(BASE + 60, 4) == 0xDEADBEEF); diff --git a/tests/compiler/std/fixedarray.debug.wat b/tests/compiler/std/fixedarray.debug.wat new file mode 100644 index 0000000000..b71d0c2ef9 --- /dev/null +++ b/tests/compiler/std/fixedarray.debug.wat @@ -0,0 +1,11167 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32))) + (type $3 (func)) + (type $4 (func (param i32 i32) (result i32))) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param i32 i32 i32) (result i32))) + (type $7 (func (param i32 i32 i64))) + (type $8 (func (param i32 i64 i32) (result i32))) + (type $9 (func (param i32 i32 i32 i32))) + (type $10 (func (param i32 i32 i32 i32) (result i32))) + (type $11 (func (param i32 i64) (result i32))) + (type $12 (func (param i32 i32) (result i64))) + (type $13 (func (param i32) (result i64))) + (type $14 (func (param i32 i64 i32 i32) (result i32))) + (type $15 (func (param i32 i32 f32))) + (type $16 (func (param i32 f32 i32) (result i32))) + (type $17 (func (param i32 i32 f64))) + (type $18 (func (param i32 f64 i32) (result i32))) + (type $19 (func (param i32 i32 i64) (result i32))) + (type $20 (func (result i32))) + (type $21 (func (param i32 f32) (result i32))) + (type $22 (func (param i32 i32) (result f32))) + (type $23 (func (param i32) (result f32))) + (type $24 (func (param i32 f32 i32 i32) (result i32))) + (type $25 (func (param i32 f64) (result i32))) + (type $26 (func (param i32 i32) (result f64))) + (type $27 (func (param i32) (result f64))) + (type $28 (func (param i32 f64 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 704)) + (global $~lib/memory/__data_end i32 (i32.const 748)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33516)) + (global $~lib/memory/__heap_base i32 (i32.const 33516)) + (memory $0 1) + (data $0 (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $1 (i32.const 60) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00~\00l\00i\00b\00/\00f\00i\00x\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 124) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $3 (i32.const 188) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 256) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 288) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 316) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 380) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 432) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 460) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 524) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\"\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 588) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\"\00\00\00C\00a\00p\00a\00c\00i\00t\00y\00 \00e\00x\00c\00e\00e\00d\00e\00d\00\00\00\00\00\00\00\00\00\00\00") + (data $12 (i32.const 652) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00") + (data $13 (i32.const 704) "\n\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 336 + i32.const 400 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 208 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 144 + i32.const 480 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 480 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 144 + i32.const 208 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 208 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedarray/FixedArray#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedarray/FixedArray#set:capacity_ (param $this i32) (param $capacity_ i32) + local.get $this + local.get $capacity_ + i32.store offset=4 + ) + (func $~lib/fixedarray/FixedArray#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedarray/FixedArray#get:capacity_ (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedarray/FixedArray#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $start:std/fixedarray + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 256 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 288 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 432 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testLength + call $std/fixedarray/testCapacity + ) + (func $~start + call $start:std/fixedarray + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33536 + i32.const 33584 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 2 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value i32) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result i32) + (local $len i32) + (local $newLen i32) + (local $value i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value i32) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 2 + i32.shl + i32.add + i32.load + local.get $value + i32.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value i32) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 2 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 2 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + i32.load + i32.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i i32) + (local $i|2 i32) + (local $val i32) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + i32.const 7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 2 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value i32) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result i32) + (local $len i32) + (local $newLen i32) + (local $value i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value i32) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 2 + i32.shl + i32.add + i32.load + local.get $value + i32.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value i32) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 2 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 2 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + i32.load + i32.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value i32) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i i32) + (local $i|2 i32) + (local $val i32) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 100 + i32.lt_u + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + i32.const 7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 3 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value i64) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result i64) + (local $2 i32) + (local $3 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + i64.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result i64) + (local $len i32) + (local $newLen i32) + (local $value i64) + (local $4 i32) + (local $5 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 3 + i32.shl + i32.add + i64.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value i64) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 3 + i32.shl + i32.add + i64.load + local.get $value + i64.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value i64) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 3 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 3 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + i64.load + i64.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value i64) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i i64) + (local $i|2 i32) + (local $val i64) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i64.const 100 + i64.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + i64.const 1 + i64.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + i64.extend_i32_s + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i64.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i64.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 0 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + i64.const 99 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 98 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + i64.const 7 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 3 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value i64) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result i64) + (local $2 i32) + (local $3 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + i64.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result i64) + (local $len i32) + (local $newLen i32) + (local $value i64) + (local $4 i32) + (local $5 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 3 + i32.shl + i32.add + i64.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value i64) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 3 + i32.shl + i32.add + i64.load + local.get $value + i64.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value i64) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 3 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 3 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + i64.load + i64.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value i64) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i i64) + (local $i|2 i32) + (local $val i64) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i64.const 100 + i64.lt_u + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + i64.const 1 + i64.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + i64.extend_i32_s + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i64.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + i64.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 0 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + i64.const 99 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 98 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + i64.const 7 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i64.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 2 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value f32) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 2 + i32.shl + i32.add + local.get $value + f32.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result f32) + (local $2 i32) + (local $3 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + f32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value f32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + f32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value f32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result f32) + (local $len i32) + (local $newLen i32) + (local $value f32) + (local $4 i32) + (local $5 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 2 + i32.shl + i32.add + f32.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value f32) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 2 + i32.shl + i32.add + f32.load + local.get $value + f32.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value f32) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 2 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 2 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + f32.load + f32.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value f32) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $value + f32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i f32) + (local $i|2 i32) + (local $val f32) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + f32.const 100 + f32.lt + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + f32.const 1 + f32.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + f32.convert_i32_s + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + f32.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 42 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + f32.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 0 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + f32.const 99 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 98 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + f32.const 7 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f32.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 42 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $this i32) (param $capacity i32) (result i32) + (local $bufferSize i32) + (local $ptr i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:capacity_ + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + local.get $capacity + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $capacity + i32.const 3 + i32.shl + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $ptr + call $~lib/fixedarray/FixedArray#set:dataPtr + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $capacity + call $~lib/fixedarray/FixedArray#set:capacity_ + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/fixedarray/FixedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedarray/FixedArray#push (param $this i32) (param $value f64) (result i32) + (local $len i32) + (local $newLen i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.ge_s + if + i32.const 608 + i32.const 80 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $len + i32.const 3 + i32.shl + i32.add + local.get $value + f64.store + i32.const 0 + drop + local.get $len + i32.const 1 + i32.add + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $newLen + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/fixedarray/FixedArray#__get (param $this i32) (param $index i32) (result f64) + (local $2 i32) + (local $3 f64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + f64.load + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#__uset (param $this i32) (param $index i32) (param $value f64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + f64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $this i32) (param $index i32) (param $value f64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:length_ + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/fixedarray/FixedArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#pop (param $this i32) (result f64) + (local $len i32) + (local $newLen i32) + (local $value f64) + (local $4 i32) + (local $5 f64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $len + i32.const 0 + i32.le_s + if + i32.const 672 + i32.const 80 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.get $newLen + i32.const 3 + i32.shl + i32.add + f64.load + local.set $value + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + local.get $value + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $this i32) (param $value f64) (param $fromIndex i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $data i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $length + local.get $length + i32.const 0 + i32.eq + if (result i32) + i32.const 1 + else + local.get $fromIndex + local.get $length + i32.ge_s + end + if + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 0 + i32.lt_s + if + local.get $length + local.get $fromIndex + i32.add + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.set $fromIndex + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + loop $while-continue|0 + local.get $fromIndex + local.get $length + i32.lt_s + if + local.get $data + local.get $fromIndex + i32.const 3 + i32.shl + i32.add + f64.load + local.get $value + f64.eq + if + local.get $fromIndex + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $fromIndex + i32.const 1 + i32.add + local.set $fromIndex + br $while-continue|0 + end + end + i32.const -1 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/fixedarray/FixedArray#includes (param $this i32) (param $value f64) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $value + local.get $fromIndex + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/fixedarray/FixedArray#swapDelete (param $this i32) (param $index i32) + (local $len i32) + (local $newLen i32) + (local $data i32) + (local $deletedOff i32) + (local $lastOff i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $index + local.get $len + i32.ge_u + if + i32.const 336 + i32.const 80 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 1 + i32.sub + local.set $newLen + local.get $index + local.get $newLen + i32.ne + if + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $index + i32.const 3 + i32.shl + local.set $deletedOff + local.get $newLen + i32.const 3 + i32.shl + local.set $lastOff + local.get $data + local.get $deletedOff + i32.add + local.get $data + local.get $lastOff + i32.add + f64.load + f64.store + end + local.get $this + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $newLen + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#set:length (param $this i32) (param $value i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/fixedarray/FixedArray#get:capacity_ + i32.gt_u + if + i32.const 32 + i32.const 80 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $value + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $this i32) (param $value f64) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $data i32) + (local $i i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:length_ + local.set $len + local.get $start + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $start + i32.add + local.tee $5 + i32.const 0 + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + else + local.get $start + local.tee $7 + local.get $len + local.tee $8 + local.get $7 + local.get $8 + i32.lt_s + select + end + local.set $start + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end + i32.add + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + else + local.get $end + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + end + local.set $end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + i32.const 0 + drop + local.get $start + local.set $i + loop $for-loop|0 + local.get $i + local.get $end + i32.lt_s + if + local.get $data + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $value + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/fixedarray/FixedArray#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testNumeric + (local $arr i32) + (local $i f64) + (local $i|2 i32) + (local $val f64) + (local $i|4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $i + loop $for-loop|0 + local.get $i + f64.const 100 + f64.lt + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i + call $~lib/fixedarray/FixedArray#push + drop + local.get $i + f64.const 1 + f64.add + local.set $i + br $for-loop|0 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 100 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|2 + call $~lib/fixedarray/FixedArray#__get + local.get $i|2 + f64.convert_i32_s + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + f64.const 42 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 42 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + f64.const 0 + call $~lib/fixedarray/FixedArray#__set + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 0 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#pop + local.set $val + local.get $val + f64.const 99 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 50 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 99 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#swapDelete + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 98 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 7 + i32.const 0 + i32.const 5 + call $~lib/fixedarray/FixedArray#fill + drop + i32.const 0 + local.set $i|4 + loop $for-loop|2 + local.get $i|4 + i32.const 5 + i32.lt_s + if + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $i|4 + call $~lib/fixedarray/FixedArray#__get + f64.const 7 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|4 + i32.const 1 + i32.add + local.set $i|4 + br $for-loop|2 + end + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#clear + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + f64.const 42 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 42 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testLength + (local $arr i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 64 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 32 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedarray/FixedArray#get:length + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedarray/FixedArray#get:length + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 67 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedarray/testCapacity + (local $arr i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $~lib/fixedarray/FixedArray#constructor + local.tee $arr + i32.store + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + call $~lib/fixedarray/FixedArray#push + drop + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedarray/FixedArray#get:length + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 77 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $arr + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 78 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 672 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 608 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/fixedarray/FixedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/fixedarray/FixedArray + block $~lib/fixedarray/FixedArray + block $~lib/fixedarray/FixedArray + block $~lib/fixedarray/FixedArray + block $~lib/fixedarray/FixedArray + block $~lib/fixedarray/FixedArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/fixedarray/FixedArray $~lib/fixedarray/FixedArray $~lib/fixedarray/FixedArray $~lib/fixedarray/FixedArray $~lib/fixedarray/FixedArray $~lib/fixedarray/FixedArray $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray~visit + return + end + unreachable + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedarray/FixedArray#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/std/fixedarray.json b/tests/compiler/std/fixedarray.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/fixedarray.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/fixedarray.release.wat b/tests/compiler/std/fixedarray.release.wat new file mode 100644 index 0000000000..78606d607b --- /dev/null +++ b/tests/compiler/std/fixedarray.release.wat @@ -0,0 +1,7341 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32) (result i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32 i64) (result i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32) (result i64))) + (type $8 (func (param i32 i64))) + (type $9 (func (param i32 f64) (result i32))) + (type $10 (func (param i32 f32) (result i32))) + (type $11 (func (param i32 f64))) + (type $12 (func (param i32 f32))) + (type $13 (func (param i32 i32) (result f64))) + (type $14 (func (param i32 i32) (result f32))) + (type $15 (func (param i32 i32 i64))) + (type $16 (func (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34540)) + (memory $0 1) + (data $0 (i32.const 1036) ",") + (data $0.1 (i32.const 1048) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $1 (i32.const 1084) "<") + (data $1.1 (i32.const 1096) "\02\00\00\00$\00\00\00~\00l\00i\00b\00/\00f\00i\00x\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data $2 (i32.const 1148) "<") + (data $2.1 (i32.const 1160) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $3 (i32.const 1212) "<") + (data $3.1 (i32.const 1224) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $6 (i32.const 1340) "<") + (data $6.1 (i32.const 1352) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $7 (i32.const 1404) ",") + (data $7.1 (i32.const 1416) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $9 (i32.const 1484) "<") + (data $9.1 (i32.const 1496) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $10 (i32.const 1548) "<") + (data $10.1 (i32.const 1560) "\02\00\00\00\"\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00a\00r\00r\00a\00y\00.\00t\00s") + (data $11 (i32.const 1612) "<") + (data $11.1 (i32.const 1624) "\02\00\00\00\"\00\00\00C\00a\00p\00a\00c\00i\00t\00y\00 \00e\00x\00c\00e\00e\00d\00e\00d") + (data $12 (i32.const 1676) ",") + (data $12.1 (i32.const 1688) "\02\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y") + (data $13 (i32.const 1728) "\n\00\00\00 \00\00\00 \00\00\00 ") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#get:length (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1168 + i32.const 1232 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $4 + local.get $0 + i32.const 16 + i32.add + local.tee $2 + i32.const 1073741820 + i32.gt_u + if + i32.const 1168 + i32.const 1504 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $2 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $5 + i32.const 256 + i32.ge_u + if (result i32) + local.get $5 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $5 + i32.const 1 + i32.const 27 + local.get $5 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $5 + end + else + local.get $5 + end + i32.const 4 + local.get $4 + i32.load offset=1568 + memory.size + local.tee $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $2 + local.get $3 + local.get $2 + local.get $3 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $4 + local.get $2 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $4 + local.get $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $5 + local.get $2 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1504 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load + local.set $6 + local.get $5 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1504 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + local.get $5 + i32.sub + local.tee $3 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $5 + local.get $6 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.add + local.tee $5 + local.get $3 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $4 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $6 + i32.const -2 + i32.and + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $3 + local.get $3 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/fixedarray/FixedArray#set:length (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=4 + i32.gt_u + if + i32.const 1056 + i32.const 1104 + i32.const 43 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#push (param $0 i32) (param $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=4 + i32.ge_s + if + i32.const 1632 + i32.const 1104 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#get:capacity (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $0 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result i64) + (local $2 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 3 + i32.shl + i32.add + i64.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result i64) + (local $2 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 3 + i32.shl + i32.add + i64.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#clear (param $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result f64) + (local $2 f64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 3 + i32.shl + i32.add + f64.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__get (param $0 i32) (param $1 i32) (result f32) + (local $2 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ge_u + if + i32.const 1360 + i32.const 1104 + i32.const 52 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 2 + i32.shl + i32.add + f32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 3 + i32.shl + i32.add + i64.load + local.get $1 + i64.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 i64) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#push (param $0 i32) (param $1 i64) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=4 + i32.ge_s + if + i32.const 1632 + i32.const 1104 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $2 + i32.const 3 + i32.shl + i32.add + local.get $1 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 3 + i32.shl + i32.add + i64.load + local.get $1 + i64.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 i64) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $0 i32) (param $1 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load + local.get $1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 3 + i32.shl + i32.add + f64.load + local.get $1 + f64.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 f64) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#indexOf (param $0 i32) (param $1 f32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.eqz + local.get $3 + i32.const 0 + i32.le_s + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_s + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + f32.load + local.get $1 + f32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $while-continue|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const -1 + ) + (func $~lib/fixedarray/FixedArray#includes (param $0 i32) (param $1 f32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 0 + i32.ge_s + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1504 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$328 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 34540 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$328 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1232 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 1728 + i32.load + i32.gt_u + if + i32.const 1360 + i32.const 1424 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 1732 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner0 + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 1056 + i32.const 1104 + i32.const 19 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + i32.shl + i32.const 1 + call $~lib/rt/itcms/__new + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=4 + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1504 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34544 + i32.const 0 + i32.store + i32.const 36112 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34544 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34544 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34544 + i32.const 36116 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 34544 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1504 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1504 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1504 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1360 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + i32.const 1696 + call $~lib/rt/itcms/__visit + i32.const 1168 + call $~lib/rt/itcms/__visit + i32.const 1632 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1232 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/fixedarray/FixedArray#fill (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 0 + local.get $2 + i32.const 0 + i32.le_s + select + local.set $1 + i32.const 5 + local.get $2 + local.get $2 + i32.const 5 + i32.gt_s + select + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $for-loop|0 + local.get $1 + local.get $2 + i32.lt_s + if + local.get $0 + local.get $1 + i32.const 3 + i32.shl + i32.add + i64.const 7 + i64.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#fill (param $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $2 + i32.const 0 + local.get $2 + i32.const 0 + i32.le_s + select + local.set $1 + i32.const 5 + local.get $2 + local.get $2 + i32.const 5 + i32.gt_s + select + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $0 + loop $for-loop|0 + local.get $1 + local.get $2 + i32.lt_s + if + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.const 7 + i32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#push (param $0 i32) (param $1 f64) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=4 + i32.ge_s + if + i32.const 1632 + i32.const 1104 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $2 + i32.const 3 + i32.shl + i32.add + local.get $1 + f64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $0 i32) (param $1 f64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + f64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedarray/FixedArray#push (param $0 i32) (param $1 f32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + if + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $2 + local.get $0 + i32.load offset=4 + i32.ge_s + if + i32.const 1632 + i32.const 1104 + i32.const 76 + i32.const 32 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $2 + i32.const 2 + i32.shl + i32.add + local.get $1 + f32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedarray/FixedArray#__set (param $0 i32) (param $1 f32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 61 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + f32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~start + (local $0 i32) + block $__inlined_func$start:std/fixedarray + memory.size + i32.const 16 + i32.shl + i32.const 34540 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1284 + i32.const 1280 + i32.store + i32.const 1288 + i32.const 1280 + i32.store + i32.const 1280 + global.set $~lib/rt/itcms/pinSpace + i32.const 1316 + i32.const 1312 + i32.store + i32.const 1320 + i32.const 1312 + i32.store + i32.const 1312 + global.set $~lib/rt/itcms/toSpace + i32.const 1460 + i32.const 1456 + i32.store + i32.const 1464 + i32.const 1456 + i32.store + i32.const 1456 + global.set $~lib/rt/itcms/fromSpace + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + call $std/fixedarray/testNumeric + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 64 + call $~lib/fixedarray/FixedArray#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 32 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 32 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 67 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $~lib/fixedarray/FixedArray#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 1 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 2 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 3 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 4 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 77 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 78 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$start:std/fixedarray + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34540 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1232 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34540 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34540 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1504 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 1024 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 128 + i32.store offset=4 + local.get $0 + local.get $3 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $2 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/fixedarray/FixedArray#push + local.get $2 + i64.const 1 + i64.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + i64.extend_i32_s + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 0 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 3 + i32.shl + i32.add + i64.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i64.const 99 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $3 + local.get $1 + i32.const 3 + i32.shl + local.get $3 + i32.add + i64.load + i64.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 98 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#fill + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + i64.const 7 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 512 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 128 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#push + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $2 + local.get $1 + i32.const 2 + i32.shl + local.get $2 + i32.add + i32.load + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#fill + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + i32.const 7 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i64) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 1024 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $3 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 128 + i32.store offset=4 + local.get $0 + local.get $3 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $2 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/fixedarray/FixedArray#push + local.get $2 + i64.const 1 + i64.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + i64.extend_i32_s + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 0 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 3 + i32.shl + i32.add + i64.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i64.const 99 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $3 + local.get $1 + i32.const 3 + i32.shl + local.get $3 + i32.add + i64.load + i64.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 98 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#fill + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + i64.const 7 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i64.const 42 + i64.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 128 + call $~lib/fixedarray/FixedArray#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#push + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $2 + local.get $1 + i32.const 2 + i32.shl + local.get $2 + i32.add + i32.load + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#fill + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + i32.const 7 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + i32.const 42 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 f64) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 1024 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 128 + i32.store offset=4 + local.get $0 + local.get $4 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $2 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/fixedarray/FixedArray#push + local.get $2 + f64.const 1 + f64.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + f64.convert_i32_s + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 42 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 0 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 3 + i32.shl + i32.add + f64.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + f64.const 99 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $3 + local.get $1 + i32.const 3 + i32.shl + local.get $3 + i32.add + f64.load + f64.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 98 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.const 0 + local.get $3 + i32.const 0 + i32.le_s + select + local.set $1 + i32.const 5 + local.get $3 + local.get $3 + i32.const 5 + i32.gt_s + select + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $4 + loop $for-loop|00 + local.get $1 + local.get $3 + i32.lt_s + if + local.get $4 + local.get $1 + i32.const 3 + i32.shl + i32.add + f64.const 7 + f64.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + f64.const 7 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f64.const 42 + f64.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedarray/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 f32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + i32.const 512 + i32.const 1 + call $~lib/rt/itcms/__new + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 128 + i32.store offset=4 + local.get $0 + local.get $4 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:capacity + i32.const 128 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $2 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/fixedarray/FixedArray#push + local.get $2 + f32.const 1 + f32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|1 + local.get $1 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + local.get $1 + f32.convert_i32_s + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 42 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 42 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 19 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedarray/FixedArray#__set + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 0 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.const 0 + i32.le_s + if + i32.const 1696 + i32.const 1104 + i32.const 90 + i32.const 19 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + i32.const 2 + i32.shl + i32.add + f32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + f32.const 99 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 99 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedarray/FixedArray#indexOf + if + i32.const 0 + i32.const 1568 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 50 + call $~lib/fixedarray/FixedArray#indexOf + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 99 + call $~lib/fixedarray/FixedArray#indexOf + i32.const -1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 50 + call $~lib/fixedarray/FixedArray#includes + i32.eqz + if + i32.const 0 + i32.const 1568 + i32.const 35 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 99 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 36 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 1360 + i32.const 1104 + i32.const 99 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.sub + local.tee $1 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $3 + local.get $1 + i32.const 2 + i32.shl + local.get $3 + i32.add + f32.load + f32.store + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 98 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 98 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedarray/FixedArray#includes + if + i32.const 0 + i32.const 1568 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 10 + call $~lib/fixedarray/FixedArray#set:length + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1772 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=8 + local.tee $3 + i32.const 0 + local.get $3 + i32.const 0 + i32.le_s + select + local.set $1 + i32.const 5 + local.get $3 + local.get $3 + i32.const 5 + i32.gt_s + select + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $4 + loop $for-loop|00 + local.get $1 + local.get $3 + i32.lt_s + if + local.get $4 + local.get $1 + i32.const 2 + i32.shl + i32.add + f32.const 7 + f32.store + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + i32.const 5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedarray/FixedArray#__get + f32.const 7 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 48 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + if + i32.const 0 + i32.const 1568 + i32.const 53 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 42 + call $~lib/fixedarray/FixedArray#push + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedarray/FixedArray#get:length + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1568 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + call $~lib/fixedarray/FixedArray#__get + f32.const 42 + f32.ne + if + i32.const 0 + i32.const 1568 + i32.const 58 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34560 + i32.const 34608 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) +) diff --git a/tests/compiler/std/fixedarray.ts b/tests/compiler/std/fixedarray.ts new file mode 100644 index 0000000000..26e75bdb4c --- /dev/null +++ b/tests/compiler/std/fixedarray.ts @@ -0,0 +1,88 @@ +function testNumeric(): void { + let arr = new FixedArray(128); + assert(arr.length == 0); + assert(arr.capacity == 128); + + // push + for (let i: T = 0; i < 100; ++i) { + arr.push(i); + } + assert(arr.length == 100); + + // index access + for (let i = 0; i < 100; ++i) { + assert(arr[i] == i); + } + + // set via operator + arr[0] = 42; + assert(arr[0] == 42); + arr[0] = 0; + assert(arr[0] == 0); + + // pop + let val = arr.pop(); + assert(val == 99); + assert(arr.length == 99); + + // indexOf + assert(arr.indexOf(0) == 0); + assert(arr.indexOf(50) == 50); + assert(arr.indexOf(99) == -1); // was popped + + // includes + assert(arr.includes(0)); + assert(arr.includes(50)); + assert(!arr.includes(99)); + + // swapDelete + arr.swapDelete(0); + assert(arr.length == 98); + assert(arr[0] == 98); // last element swapped to index 0 + assert(!arr.includes(0)); // was swap-deleted (assuming no dup) + + // fill + arr.length = 10; + arr.fill(7, 0, 5); + for (let i = 0; i < 5; ++i) { + assert(arr[i] == 7); + } + + // clear + arr.clear(); + assert(arr.length == 0); + + // push after clear + arr.push(42); + assert(arr.length == 1); + assert(arr[0] == 42); +} + +// set length +function testLength(): void { + let arr = new FixedArray(64); + arr.length = 32; + assert(arr.length == 32); + arr.length = 0; + assert(arr.length == 0); +} + +// push to capacity +function testCapacity(): void { + let arr = new FixedArray(4); + arr.push(1); + arr.push(2); + arr.push(3); + arr.push(4); + assert(arr.length == 4); + assert(arr.capacity == 4); +} + +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testLength(); +testCapacity(); diff --git a/tests/compiler/std/fixedmap.debug.wat b/tests/compiler/std/fixedmap.debug.wat new file mode 100644 index 0000000000..bee28511f8 --- /dev/null +++ b/tests/compiler/std/fixedmap.debug.wat @@ -0,0 +1,19158 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func)) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param i32) (result i64))) + (type $7 (func (param i32 i64))) + (type $8 (func (param i32 i64) (result i32))) + (type $9 (func (param i32 i32 i32 i32))) + (type $10 (func (param i64) (result i32))) + (type $11 (func (param i32) (result f32))) + (type $12 (func (param i32 f32))) + (type $13 (func (param i32) (result f64))) + (type $14 (func (param i32 f64))) + (type $15 (func (param i32 i32 i32) (result i32))) + (type $16 (func (param i32 i64 i64) (result i32))) + (type $17 (func (param i32 i64) (result i64))) + (type $18 (func (param i32 i32 i64))) + (type $19 (func (param i32 f32) (result i32))) + (type $20 (func (param i32 f64) (result i32))) + (type $21 (func (param i32 i32 i64) (result i32))) + (type $22 (func (result i32))) + (type $23 (func (param f32) (result i32))) + (type $24 (func (param f64) (result i32))) + (type $25 (func (param i32 f32 f32) (result i32))) + (type $26 (func (param i32 f32) (result f32))) + (type $27 (func (param i32 i32 f32))) + (type $28 (func (param i32 f64 f64) (result i32))) + (type $29 (func (param i32 f64) (result f64))) + (type $30 (func (param i32 i32 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 704)) + (global $~lib/memory/__data_end i32 (i32.const 772)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33540)) + (global $~lib/memory/__heap_base i32 (i32.const 33540)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 412) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00m\00a\00p\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 476) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t\00\00\00\00\00\00\00\00\00") + (data $10 (i32.const 540) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00f\00i\00x\00e\00d\00m\00a\00p\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $11 (i32.const 604) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $12 (i32.const 652) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $13 (i32.const 704) "\10\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\02\n\00\00\00\00\00\00\02\02\00\00\00\00\00\00\02\19\00\00\00\00\00\00\02\1a\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.0 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store offset=12 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.1 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.1 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value i32) + local.get $this + local.get $value + i32.store offset=12 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 8 + i32.const 4 + i32.le_u + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.0 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result i64) + local.get $this + i64.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key i64) + local.get $this + local.get $key + i64.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result i64) + local.get $this + i64.load offset=16 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value i64) + local.get $this + local.get $value + i64.store offset=16 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 8 + i32.const 4 + i32.le_u + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.1 (result i32) + local.get $key + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.1 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result i64) + local.get $this + i64.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key i64) + local.get $this + local.get $key + i64.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result i64) + local.get $this + i64.load offset=16 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value i64) + local.get $this + local.get $value + i64.store offset=16 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key f32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 4 + i32.const 4 + i32.eq + drop + block $~lib/util/hash/hash32|inlined.2 (result i32) + local.get $key + i32.reinterpret_f32 + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.2 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result f32) + local.get $this + f32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key f32) + local.get $this + local.get $key + f32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result f32) + local.get $this + f32.load offset=12 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value f32) + local.get $this + local.get $value + f32.store offset=12 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:dataPtr" (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $"~lib/fixedmap/FixedMap#set:_capacity" (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $"~lib/fixedmap/FixedMap#set:capacityMask" (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $"~lib/fixedmap/FixedMap#set:_count" (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $"~lib/fixedmap/FixedMap#set:_entriesUsed" (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_count" (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key f64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.2 (result i32) + local.get $key + i64.reinterpret_f64 + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.2 + end + return + ) + (func $"~lib/fixedmap/FixedMap#get:capacityMask" (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $"~lib/fixedmap/FixedMap#get:dataPtr" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:state" (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:hash" (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $"~lib/fixedmap/FixedMapSlot#get:key" (param $this i32) (result f64) + local.get $this + f64.load offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:state" (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $"~lib/fixedmap/FixedMap#get:_entriesUsed" (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $"~lib/fixedmap/FixedMap#get:_capacity" (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:hash" (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $"~lib/fixedmap/FixedMapSlot#set:key" (param $this i32) (param $key f64) + local.get $this + local.get $key + f64.store offset=8 + ) + (func $"~lib/fixedmap/FixedMapSlot#get:value" (param $this i32) (result f64) + local.get $this + f64.load offset=16 + ) + (func $"~lib/fixedmap/FixedMapSlot#set:value" (param $this i32) (param $value f64) + local.get $this + local.get $value + f64.store offset=16 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $start:std/fixedmap + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $std/fixedmap/testOperators + call $std/fixedmap/testCapacity + ) + (func $~start + call $start:std/fixedmap + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33568 + i32.const 33616 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k i32) + (local $k|2 i32) + (local $keys i32) + (local $vals i32) + (local $k|5 i32) + (local $k|6 i32) + (local $k|7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i32.const 100 + i32.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + i32.const 10 + local.get $k + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + local.get $k + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i32.const 1 + i32.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i32.const 100 + i32.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + local.get $k|2 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + i32.const 20 + local.get $k|2 + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + local.get $k|2 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + i32.const 1 + i32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + i32.const 50 + i32.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i32.const 1 + i32.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + i32.const 100 + i32.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + local.get $k|6 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i32.const 1 + i32.add + local.set $k|6 + br $for-loop|3 + end + end + i32.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + i32.const 50 + i32.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + i32.const 30 + local.get $k|7 + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + i32.const 30 + local.get $k|7 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + i32.const 1 + i32.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key i32) (param $value i32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k i32) + (local $k|2 i32) + (local $keys i32) + (local $vals i32) + (local $k|5 i32) + (local $k|6 i32) + (local $k|7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i32.const 100 + i32.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + i32.const 10 + local.get $k + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + local.get $k + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i32.const 1 + i32.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i32.const 100 + i32.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + local.get $k|2 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + i32.const 20 + local.get $k|2 + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + local.get $k|2 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + i32.const 1 + i32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + i32.const 50 + i32.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i32.const 1 + i32.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + i32.const 100 + i32.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + local.get $k|6 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i32.const 1 + i32.add + local.set $k|6 + br $for-loop|3 + end + end + i32.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + i32.const 50 + i32.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + i32.const 30 + local.get $k|7 + i32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + i32.const 30 + local.get $k|7 + i32.add + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + i32.const 1 + i32.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key i64) (param $value i64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + i64.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key i64) (result i64) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + (local $15 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k i64) + (local $k|2 i64) + (local $keys i32) + (local $vals i32) + (local $k|5 i64) + (local $k|6 i64) + (local $k|7 i64) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i64.const 100 + i64.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + i64.const 10 + local.get $k + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + i64.const 10 + local.get $k + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i64.const 1 + i64.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i64.const 100 + i64.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i64.const 10 + local.get $k|2 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + i64.const 20 + local.get $k|2 + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i64.const 20 + local.get $k|2 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + i64.const 1 + i64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + i64.const 50 + i64.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i64.const 1 + i64.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + i64.const 100 + i64.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + i64.const 20 + local.get $k|6 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i64.const 1 + i64.add + local.set $k|6 + br $for-loop|3 + end + end + i64.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + i64.const 50 + i64.lt_s + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + i64.const 30 + local.get $k|7 + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + i64.const 30 + local.get $k|7 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + i64.const 1 + i64.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 1 + i64.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 1 + call $"~lib/fixedmap/FixedMap#get" + i64.const 2 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key i64) (param $value i64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + i64.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key i64) (result i64) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + (local $15 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k i64) + (local $k|2 i64) + (local $keys i32) + (local $vals i32) + (local $k|5 i64) + (local $k|6 i64) + (local $k|7 i64) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i64.const 100 + i64.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + i64.const 10 + local.get $k + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + i64.const 10 + local.get $k + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i64.const 1 + i64.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i64.const 100 + i64.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i64.const 10 + local.get $k|2 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + i64.const 20 + local.get $k|2 + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + i64.const 20 + local.get $k|2 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + i64.const 1 + i64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + i64.const 50 + i64.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i64.const 1 + i64.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + i64.const 100 + i64.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + i64.const 20 + local.get $k|6 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i64.const 1 + i64.add + local.set $k|6 + br $for-loop|3 + end + end + i64.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + i64.const 50 + i64.lt_u + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + i64.const 30 + local.get $k|7 + i64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + i64.const 30 + local.get $k|7 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + i64.const 1 + i64.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 1 + i64.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i64.const 1 + call $"~lib/fixedmap/FixedMap#get" + i64.const 2 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key f32) (result i32) + (local $this|2 i32) + (local $key|3 f32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key f32) (result i32) + (local $this|2 i32) + (local $key|3 f32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key f32) (param $value f32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + f32.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key f32) (result f32) + (local $this|2 i32) + (local $key|3 f32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + (local $15 f32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f32.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value f32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + f32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 16 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k f32) + (local $k|2 f32) + (local $keys i32) + (local $vals i32) + (local $k|5 f32) + (local $k|6 f32) + (local $k|7 f32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + f32.const 100 + f32.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + f32.const 10 + local.get $k + f32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + f32.const 10 + local.get $k + f32.add + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + f32.const 1 + f32.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + f32.const 100 + f32.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + f32.const 10 + local.get $k|2 + f32.add + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + f32.const 20 + local.get $k|2 + f32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + f32.const 20 + local.get $k|2 + f32.add + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + f32.const 1 + f32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + f32.const 50 + f32.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + f32.const 1 + f32.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + f32.const 100 + f32.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + f32.const 20 + local.get $k|6 + f32.add + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + f32.const 1 + f32.add + local.set $k|6 + br $for-loop|3 + end + end + f32.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + f32.const 50 + f32.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + f32.const 30 + local.get $k|7 + f32.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + f32.const 30 + local.get $k|7 + f32.add + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + f32.const 1 + f32.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f32.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f32.const 1 + f32.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f32.const 1 + call $"~lib/fixedmap/FixedMap#get" + f32.const 2 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.0" + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:capacityMask" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_count" + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#has" (param $this i32) (param $key f64) (result i32) + (local $this|2 i32) + (local $key|3 f64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.1" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $this i32) (param $key f64) (result i32) + (local $this|2 i32) + (local $key|3 f64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.2" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.3" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.sub + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $"~lib/fixedmap/FixedMap#rehash" (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $oldCapacity + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.4" + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $newSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $newSlot + local.get $oldSlot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $"~lib/fixedmap/FixedMapSlot#set:value" + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $"~lib/fixedmap/FixedMap#set:dataPtr" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $"~lib/fixedmap/FixedMap#set:_capacity" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $"~lib/fixedmap/FixedMap#set:capacityMask" + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $"~lib/fixedmap/FixedMap#get:_count" + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $this i32) (param $key f64) (param $value f64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|14 i32) + (local $15 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 4 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 2 + i32.mul + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.gt_s + if (result i32) + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + i32.const 1 + i32.shl + else + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_capacity" + end + call $"~lib/fixedmap/FixedMap#rehash" + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.5" + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key + f64.eq + else + i32.const 0 + end + if + local.get $slot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_entriesUsed" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + end + i32.const 0 + drop + i32.const 0 + drop + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|14 + local.get $insertSlot|14 + local.get $hashCode + call $"~lib/fixedmap/FixedMapSlot#set:hash" + local.get $insertSlot|14 + i32.const 1 + call $"~lib/fixedmap/FixedMapSlot#set:state" + local.get $insertSlot|14 + local.get $key + call $"~lib/fixedmap/FixedMapSlot#set:key" + local.get $insertSlot|14 + local.get $value + call $"~lib/fixedmap/FixedMapSlot#set:value" + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store + local.get $15 + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + local.get $15 + i32.store offset=4 + local.get $15 + call $"~lib/fixedmap/FixedMap#get:_count" + i32.const 1 + i32.add + call $"~lib/fixedmap/FixedMap#set:_count" + i32.const 0 + drop + i32.const 0 + drop + end + local.get $this + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $"~lib/fixedmap/FixedMap#get" (param $this i32) (param $key f64) (result f64) + (local $this|2 i32) + (local $key|3 f64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + (local $15 f64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:capacityMask" + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.6" + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:hash" + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + local.get $key|3 + f64.eq + else + i32.const 0 + end + if + local.get $i + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 496 + i32.const 560 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.get $idx + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.7" + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + call $"~lib/fixedmap/FixedMapSlot#get:value" + local.set $15 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $15 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 624 + i32.const 672 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value f64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 672 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + f64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#keys" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $keys i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.8" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $keys + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:key" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $keys + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $"~lib/fixedmap/FixedMap#values" (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_capacity" + local.set $cap + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.9" + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $"~lib/fixedmap/FixedMap#get:_count" + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:state" + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $"~lib/fixedmap/FixedMapSlot#get:value" + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $"~lib/fixedmap/FixedMap#get:_capacity" + block $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" (result i32) + i32.const 24 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $"~lib/fixedmap/FM_SLOT_SIZE|inlined.10" + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_count" + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $"~lib/fixedmap/FixedMap#set:_entriesUsed" + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/fixedmap/testNumeric" + (local $map i32) + (local $k f64) + (local $k|2 f64) + (local $keys i32) + (local $vals i32) + (local $k|5 f64) + (local $k|6 f64) + (local $k|7 f64) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + f64.const 100 + f64.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + f64.const 10 + local.get $k + f64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k + call $"~lib/fixedmap/FixedMap#get" + f64.const 10 + local.get $k + f64.add + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + f64.const 1 + f64.add + local.set $k + br $for-loop|0 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + f64.const 100 + f64.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + f64.const 10 + local.get $k|2 + f64.add + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + f64.const 20 + local.get $k|2 + f64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|2 + call $"~lib/fixedmap/FixedMap#get" + f64.const 20 + local.get $k|2 + f64.add + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|2 + f64.const 1 + f64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#keys" + local.tee $keys + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#values" + local.tee $vals + i32.store offset=12 + local.get $keys + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $vals + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k|5 + loop $for-loop|2 + local.get $k|5 + f64.const 50 + f64.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|5 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + f64.const 1 + f64.add + local.set $k|5 + br $for-loop|2 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 50 + local.set $k|6 + loop $for-loop|3 + local.get $k|6 + f64.const 100 + f64.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|6 + call $"~lib/fixedmap/FixedMap#get" + f64.const 20 + local.get $k|6 + f64.add + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + f64.const 1 + f64.add + local.set $k|6 + br $for-loop|3 + end + end + f64.const 0 + local.set $k|7 + loop $for-loop|4 + local.get $k|7 + f64.const 50 + f64.lt + if + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + f64.const 30 + local.get $k|7 + f64.add + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $k|7 + call $"~lib/fixedmap/FixedMap#get" + f64.const 30 + local.get $k|7 + f64.add + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|7 + f64.const 1 + f64.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#clear" + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f64.const 0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f64.const 1 + f64.const 2 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + f64.const 1 + call $"~lib/fixedmap/FixedMap#get" + f64.const 2 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedmap/testOperators + (local $map i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 10 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 20 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 73 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 74 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 30 + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 76 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $map + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 77 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedmap/testCapacity + (local $map i32) + (local $i i32) + (local $i|2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $map + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 200 + i32.lt_s + if + local.get $map + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $i + local.get $i + i32.const 10 + i32.mul + call $"~lib/fixedmap/FixedMap#set" + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $map + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 200 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 86 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 200 + i32.lt_s + if + local.get $map + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $i|2 + call $"~lib/fixedmap/FixedMap#get" + local.get $i|2 + i32.const 10 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 88 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 624 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 496 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/fixedmap/FixedMap~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/array/Array + block $"~lib/fixedmap/FixedMap" + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"~lib/fixedmap/FixedMap" $~lib/array/Array $"~lib/fixedmap/FixedMap" $~lib/array/Array $"~lib/fixedmap/FixedMap" $~lib/array/Array $"~lib/fixedmap/FixedMap" $~lib/array/Array $"~lib/fixedmap/FixedMap" $~lib/array/Array $"~lib/fixedmap/FixedMap" $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/fixedmap/FixedMap~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#__visit" (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $"~lib/fixedmap/FixedMap#get:dataPtr" + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/std/fixedmap.json b/tests/compiler/std/fixedmap.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/fixedmap.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/fixedmap.release.wat b/tests/compiler/std/fixedmap.release.wat new file mode 100644 index 0000000000..0693688488 --- /dev/null +++ b/tests/compiler/std/fixedmap.release.wat @@ -0,0 +1,13685 @@ +(module + (type $0 (func)) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i64) (result i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 f64) (result i32))) + (type $9 (func (param i32 f32) (result i32))) + (type $10 (func (param i32 i64) (result i64))) + (type $11 (func (param i32 i64 i64))) + (type $12 (func (param i32 i32 i64))) + (type $13 (func (param i32 f64) (result f64))) + (type $14 (func (param i32 f32) (result f32))) + (type $15 (func (param i32 f64 f64))) + (type $16 (func (param i32 f32 f32))) + (type $17 (func (param i32 i32 f64))) + (type $18 (func (param i32 i32 f32))) + (type $19 (func (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34564)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $4 (i32.const 1228) "<") + (data $4.1 (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $5 (i32.const 1292) ",") + (data $5.1 (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $7 (i32.const 1372) "<") + (data $7.1 (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $8 (i32.const 1436) "<") + (data $8.1 (i32.const 1448) "\02\00\00\00\1e\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00m\00a\00p\00.\00t\00s") + (data $9 (i32.const 1500) "<") + (data $9.1 (i32.const 1512) "\02\00\00\00$\00\00\00K\00e\00y\00 \00d\00o\00e\00s\00 \00n\00o\00t\00 \00e\00x\00i\00s\00t") + (data $10 (i32.const 1564) "<") + (data $10.1 (i32.const 1576) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00f\00i\00x\00e\00d\00m\00a\00p\00.\00t\00s") + (data $11 (i32.const 1628) ",") + (data $11.1 (i32.const 1640) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $12 (i32.const 1676) ",") + (data $12.1 (i32.const 1688) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $13 (i32.const 1728) "\10\00\00\00 \00\00\00 \00\00\00 ") + (data $13.1 (i32.const 1752) "\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\02\n\00\00\00\00\00\00\02\02\00\00\00\00\00\00\02\19\00\00\00\00\00\00\02\1a") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#get:size" (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $4 + local.get $0 + i32.const 16 + i32.add + local.tee $2 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $2 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $5 + i32.const 256 + i32.ge_u + if (result i32) + local.get $5 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $5 + i32.const 1 + i32.const 27 + local.get $5 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $5 + end + else + local.get $5 + end + i32.const 4 + local.get $4 + i32.load offset=1568 + memory.size + local.tee $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $2 + local.get $3 + local.get $2 + local.get $3 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $4 + local.get $2 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $4 + local.get $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $5 + local.get $2 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load + local.set $6 + local.get $5 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + local.get $5 + i32.sub + local.tee $3 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $5 + local.get $6 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.add + local.tee $5 + local.get $3 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $4 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $6 + i32.const -2 + i32.and + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $3 + local.get $3 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $0 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 24 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 24 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i64.reinterpret_f64 + local.tee $4 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $8 + local.get $2 + i32.const 24 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $7 + local.get $0 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $"~lib/fixedmap/FixedMap#has" (param $0 i32) (param $1 f32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.0" + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 4 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $3 + loop $while-continue|1 + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $11 + i32.load offset=8 + i32.store offset=8 + local.get $3 + local.get $11 + i32.load offset=12 + i32.store offset=12 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + if + local.get $9 + local.get $2 + i32.store offset=12 + br $folding-inner0 + end + else + local.get $10 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $4 + local.get $5 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + i32.store offset=8 + local.get $4 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $7 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 i64) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + i64.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 i64) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + i64.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 f64) (result f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i64.reinterpret_f64 + local.tee $5 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $5 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $6 + local.get $0 + i32.load offset=8 + local.tee $7 + i32.and + local.tee $8 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $9 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $9 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $10 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $10 + i32.const 1 + i32.eq + if (result i32) + local.get $6 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $8 + local.get $2 + i32.const 1 + i32.add + local.get $7 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + f64.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#get" (param $0 i32) (param $1 f32) (result f32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.2" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + i32.const 1520 + i32.const 1584 + i32.const 92 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + f32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/ensureCapacity (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + local.tee $5 + local.get $2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 1073741820 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $4 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + local.get $2 + i32.shl + local.set $1 + local.get $3 + if + i32.const 1073741820 + local.get $5 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + local.get $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.set $1 + end + block $__inlined_func$~lib/rt/itcms/__renew$760 + local.get $4 + i32.const 20 + i32.sub + local.tee $3 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + local.get $1 + i32.ge_u + if + local.get $3 + local.get $1 + i32.store offset=16 + local.get $4 + local.set $2 + br $__inlined_func$~lib/rt/itcms/__renew$760 + end + local.get $1 + local.get $3 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $2 + local.get $4 + local.get $1 + local.get $3 + i32.load offset=16 + local.tee $3 + local.get $1 + local.get $3 + i32.lt_u + select + memory.copy + end + local.get $2 + local.get $4 + i32.ne + if + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 i64) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 24 + i32.mul + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $3 + loop $while-continue|1 + local.get $10 + local.get $3 + i32.const 24 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $10 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $11 + i64.load offset=8 + i64.store offset=8 + local.get $3 + local.get $11 + i64.load offset=16 + i64.store offset=16 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + if + local.get $9 + local.get $2 + i64.store offset=16 + br $folding-inner0 + end + else + local.get $10 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 24 + i32.mul + i32.add + local.tee $4 + local.get $5 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + i64.store offset=8 + local.get $4 + local.get $2 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $7 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i64.store offset=8 + local.get $3 + local.get $2 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 4 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $3 + loop $while-continue|1 + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $11 + i32.load offset=8 + i32.store offset=8 + local.get $3 + local.get $11 + i32.load offset=12 + i32.store offset=12 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + if + local.get $9 + local.get $2 + i32.store offset=12 + br $folding-inner0 + end + else + local.get $10 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $4 + local.get $5 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + i32.store offset=8 + local.get $4 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $7 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + local.get $3 + local.get $2 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 i64) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 24 + i32.mul + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $3 + loop $while-continue|1 + local.get $10 + local.get $3 + i32.const 24 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $10 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $11 + i64.load offset=8 + i64.store offset=8 + local.get $3 + local.get $11 + i64.load offset=16 + i64.store offset=16 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + if + local.get $9 + local.get $2 + i64.store offset=16 + br $folding-inner0 + end + else + local.get $10 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 24 + i32.mul + i32.add + local.tee $4 + local.get $5 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + i64.store offset=8 + local.get $4 + local.get $2 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $7 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i64.store offset=8 + local.get $3 + local.get $2 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 f64) (param $2 f64) + (local $3 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $9 + local.get $7 + i32.const 1 + i32.sub + local.set $10 + local.get $7 + i32.const 24 + i32.mul + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $11 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $9 + i32.lt_s + if + local.get $8 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $12 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $12 + i32.load + local.tee $6 + local.get $10 + i32.and + local.set $3 + loop $while-continue|1 + local.get $11 + local.get $3 + i32.const 24 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $10 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $11 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $6 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $12 + f64.load offset=8 + f64.store offset=8 + local.get $3 + local.get $12 + f64.load offset=16 + f64.store offset=16 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $11 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $7 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $11 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i64.reinterpret_f64 + local.tee $5 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $5 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $6 + local.get $0 + i32.load offset=8 + local.tee $7 + i32.and + local.tee $8 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $9 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $9 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $10 + i32.load8_u offset=4 + local.tee $11 + i32.const 1 + i32.eq + if + local.get $6 + local.get $10 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $10 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + if + local.get $10 + local.get $2 + f64.store offset=16 + br $folding-inner0 + end + else + local.get $11 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $9 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 24 + i32.mul + i32.add + local.tee $4 + local.get $6 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + f64.store offset=8 + local.get $4 + local.get $2 + f64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $8 + local.get $4 + i32.const 1 + i32.add + local.get $7 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $9 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $3 + local.get $6 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + f64.store offset=8 + local.get $3 + local.get $2 + f64.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#set" (param $0 i32) (param $1 f32) (param $2 f32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 4 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $3 + memory.fill + loop $for-loop|0 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $3 + loop $while-continue|1 + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $3 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $3 + br $while-continue|1 + end + end + local.get $10 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $11 + f32.load offset=8 + f32.store offset=8 + local.get $3 + local.get $11 + f32.load offset=12 + f32.store offset=12 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $3 + i32.const 15 + i32.shr_u + local.get $3 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $3 + i32.const 13 + i32.shr_u + local.get $3 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $3 + i32.const 16 + i32.shr_u + local.get $3 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $3 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + if + local.get $9 + local.get $2 + f32.store offset=12 + br $folding-inner0 + end + else + local.get $10 + if (result i32) + local.get $4 + local.get $3 + local.get $3 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $3 + local.get $4 + local.get $3 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $4 + local.get $5 + i32.store + local.get $4 + i32.const 1 + i32.store8 offset=4 + local.get $4 + local.get $1 + f32.store offset=8 + local.get $4 + local.get $2 + f32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $3 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $3 + end + local.get $7 + local.get $4 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $4 + i32.ne + br_if $do-loop|0 + end + local.get $3 + i32.const -1 + i32.ne + if + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + f32.store offset=8 + local.get $3 + local.get $2 + f32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1696 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1696 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$778 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 34564 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$778 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 1728 + i32.load + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 1732 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + i32.const 0 + local.get $0 + i32.load offset=4 + i32.const 24 + i32.mul + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $"~lib/fixedmap/FixedMap#constructor" (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.get $0 + local.get $0 + i32.const 4 + i32.lt_s + select + local.set $2 + i32.const 4 + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $2 + i32.lt_s + if + local.get $0 + i32.const 1 + i32.shl + local.set $0 + br $while-continue|0 + end + end + local.get $0 + i32.const 4 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 0 + local.get $3 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $"~lib/fixedmap/FixedMap#clear" (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + i32.const 0 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.shl + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i64.reinterpret_f64 + local.tee $5 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $5 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $6 + local.get $0 + i32.load offset=8 + local.tee $7 + i32.and + local.tee $8 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $9 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $9 + local.get $3 + i32.const 24 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $10 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $10 + i32.const 1 + i32.eq + if (result i32) + local.get $6 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $8 + local.get $2 + i32.const 1 + i32.add + local.get $7 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 24 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $"~lib/fixedmap/FixedMap#delete" (param $0 i32) (param $1 f32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $"~lib/fixedmap/FixedMap#findSlot|inlined.1" + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34576 + i32.const 0 + i32.store + i32.const 36144 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34576 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34576 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34576 + i32.const 36148 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 34576 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1248 + call $~lib/rt/itcms/__visit + i32.const 1648 + call $~lib/rt/itcms/__visit + i32.const 1520 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 134217727 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 134217727 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 134217727 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 f64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1696 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + f64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 268435455 + i32.gt_u + if + i32.const 1648 + i32.const 1696 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $0 + local.get $0 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $1 + local.get $2 + i32.store + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 f32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + if + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1696 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + f32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:std/fixedmap + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34564 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34564 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34564 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 24 + i32.mul + local.tee $6 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 0 + local.get $6 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $7 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 10 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 10 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 10 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 20 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 20 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $2 + i32.store offset=4 + loop $for-loop|00 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $9 + i64.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $8 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|01 + local.get $5 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + local.get $9 + i64.load offset=16 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + i64.const 50 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 20 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|3 + end + end + i64.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i64.const 50 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 30 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 30 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 1 + i64.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 1 + call $"~lib/fixedmap/FixedMap#get" + i64.const 2 + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 16 + i32.lt_s + if + local.get $1 + i32.const 1 + i32.shl + local.set $1 + br $while-continue|0 + end + end + local.get $1 + i32.const 4 + i32.shl + local.tee $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 0 + local.get $4 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $2 + local.get $5 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 10 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 20 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $6 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|00 + local.get $3 + local.get $5 + i32.lt_s + if + local.get $4 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $7 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $0 + local.get $7 + i32.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $8 + i32.store offset=4 + i32.const 0 + local.set $0 + i32.const 0 + local.set $3 + loop $for-loop|01 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $5 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $1 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + local.get $1 + i32.load offset=12 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|2 + local.get $0 + i32.const 50 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $0 + loop $for-loop|3 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 + end + end + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 + i32.const 50 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 30 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 30 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 24 + i32.mul + local.tee $6 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 0 + local.get $6 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $7 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 10 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 10 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 10 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 20 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 20 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $2 + i32.store offset=4 + loop $for-loop|00 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $9 + i64.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $8 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|01 + local.get $5 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + local.get $9 + i64.load offset=16 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + i64.const 50 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 20 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|3 + end + end + i64.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i64.const 50 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + i64.const 30 + i64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + i64.const 30 + i64.add + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 1 + i64.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i64.const 1 + call $"~lib/fixedmap/FixedMap#get" + i64.const 2 + i64.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 10 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 10 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 20 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $1 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|00 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $8 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + local.get $8 + i32.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $7 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|01 + local.get $4 + local.get $6 + i32.lt_s + if + local.get $5 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $8 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $0 + local.get $8 + i32.load offset=12 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|2 + local.get $0 + i32.const 50 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $0 + loop $for-loop|3 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 20 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 + end + end + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 + i32.const 50 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + local.get $0 + i32.const 30 + i32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 30 + i32.add + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 f64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 24 + i32.mul + local.tee $6 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 0 + local.get $6 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $7 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f64.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f64.const 10 + f64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f64.const 10 + f64.add + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f64.const 1 + f64.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f64.const 10 + f64.add + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f64.const 20 + f64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f64.const 20 + f64.add + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f64.const 1 + f64.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $2 + i32.store offset=4 + loop $for-loop|00 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $9 + f64.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $8 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|01 + local.get $5 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $5 + i32.const 24 + i32.mul + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + local.get $9 + f64.load offset=16 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + f64.const 50 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f64.const 1 + f64.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f64.const 20 + f64.add + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f64.const 1 + f64.add + local.set $3 + br $for-loop|3 + end + end + f64.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + f64.const 50 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f64.const 30 + f64.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f64.const 30 + f64.add + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f64.const 1 + f64.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f64.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f64.const 1 + f64.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f64.const 1 + call $"~lib/fixedmap/FixedMap#get" + f64.const 2 + f64.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $"std/fixedmap/testNumeric" + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 f32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 4 + i32.shl + local.tee $6 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $7 + i32.const 0 + local.get $6 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $7 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f32.const 0 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f32.const 10 + f32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f32.const 10 + f32.add + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 14 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f32.const 1 + f32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 16 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 20 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f32.const 10 + f32.add + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f32.const 20 + f32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 23 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f32.const 20 + f32.add + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 24 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f32.const 1 + f32.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 26 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $2 + i32.store offset=4 + loop $for-loop|00 + local.get $4 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + local.get $9 + f32.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.load offset=4 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.load offset=12 + call $~lib/array/Array#constructor + local.tee $8 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|01 + local.get $5 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $5 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + local.get $9 + f32.load offset=12 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $5 + i32.const 1 + i32.add + local.set $5 + br $for-loop|01 + end + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + f32.const 50 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 36 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 37 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#delete" + if + i32.const 0 + i32.const 1456 + i32.const 39 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f32.const 1 + f32.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 45 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f32.const 20 + f32.add + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f32.const 1 + f32.add + local.set $3 + br $for-loop|3 + end + end + f32.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + f32.const 50 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + local.get $3 + f32.const 30 + f32.add + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#has" + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 52 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $3 + call $"~lib/fixedmap/FixedMap#get" + local.get $3 + f32.const 30 + f32.add + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 53 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + f32.const 1 + f32.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#clear" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + if + i32.const 0 + i32.const 1456 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f32.const 0 + call $"~lib/fixedmap/FixedMap#has" + if + i32.const 0 + i32.const 1456 + i32.const 60 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f32.const 1 + f32.const 2 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + f32.const 1 + call $"~lib/fixedmap/FixedMap#get" + f32.const 2 + f32.ne + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $start:std/fixedmap + (local $0 i32) + (local $1 i32) + memory.size + i32.const 16 + i32.shl + i32.const 34564 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store + i32.const 1176 + i32.const 1168 + i32.store + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store + i32.const 1352 + i32.const 1344 + i32.store + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + call $"std/fixedmap/testNumeric" + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 16 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 10 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 20 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 73 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $"~lib/fixedmap/FixedMap#get" + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 74 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 30 + call $"~lib/fixedmap/FixedMap#set" + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $"~lib/fixedmap/FixedMap#get" + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 76 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 77 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1796 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $"~lib/fixedmap/FixedMap#constructor" + local.tee $1 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 200 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + local.get $0 + i32.const 10 + i32.mul + call $"~lib/fixedmap/FixedMap#set" + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $"~lib/fixedmap/FixedMap#get:size" + i32.const 200 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 86 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 200 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + call $"~lib/fixedmap/FixedMap#get" + local.get $0 + i32.const 10 + i32.mul + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 88 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34592 + i32.const 34640 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) +) diff --git a/tests/compiler/std/fixedmap.ts b/tests/compiler/std/fixedmap.ts new file mode 100644 index 0000000000..fee9f9e140 --- /dev/null +++ b/tests/compiler/std/fixedmap.ts @@ -0,0 +1,99 @@ +function testNumeric(): void { + let map = new FixedMap(); + + // empty map + assert(map.size == 0); + assert(!map.has(0)); + assert(!map.delete(0)); + + // insert new + for (let k: K = 0; k < 100; ++k) { + assert(!map.has(k)); + map.set(k, 10 + k); + assert(map.has(k)); + assert(map.get(k) == 10 + k); + } + assert(map.size == 100); + + // insert duplicate (update) + for (let k: K = 0; k < 100; ++k) { + assert(map.has(k)); + assert(map.get(k) == 10 + k); + map.set(k, 20 + k); + assert(map.has(k)); + assert(map.get(k) == 20 + k); + } + assert(map.size == 100); + + // keys and values + let keys = map.keys(); + let vals = map.values(); + assert(keys.length == 100); + assert(vals.length == 100); + + // delete half + for (let k: K = 0; k < 50; ++k) { + assert(map.has(k)); + assert(map.delete(k)); + assert(!map.has(k)); + assert(!map.delete(k)); + } + assert(map.size == 50); + + // remaining half still accessible + for (let k: K = 50; k < 100; ++k) { + assert(map.has(k)); + assert(map.get(k) == 20 + k); + } + + // re-insert after delete (reuses tombstones) + for (let k: K = 0; k < 50; ++k) { + map.set(k, 30 + k); + assert(map.has(k)); + assert(map.get(k) == 30 + k); + } + assert(map.size == 100); + + // clear + map.clear(); + assert(map.size == 0); + assert(!map.has(0)); + + // insert after clear + map.set(1, 2); + assert(map.size == 1); + assert(map.get(1) == 2); +} + +// operator access +function testOperators(): void { + let map = new FixedMap(); + map[1] = 10; + map[2] = 20; + assert(map[1] == 10); + assert(map[2] == 20); + map[1] = 30; + assert(map[1] == 30); + assert(map.size == 2); +} + +// custom capacity +function testCapacity(): void { + let map = new FixedMap(4); + for (let i = 0; i < 200; ++i) { + map.set(i, i * 10); + } + assert(map.size == 200); + for (let i = 0; i < 200; ++i) { + assert(map.get(i) == i * 10); + } +} + +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testOperators(); +testCapacity(); diff --git a/tests/compiler/std/fixedset.debug.wat b/tests/compiler/std/fixedset.debug.wat new file mode 100644 index 0000000000..a40d88337e --- /dev/null +++ b/tests/compiler/std/fixedset.debug.wat @@ -0,0 +1,16224 @@ +(module + (type $0 (func (param i32 i32))) + (type $1 (func (param i32) (result i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func)) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param i32 i64) (result i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 f32) (result i32))) + (type $9 (func (param i32 f64) (result i32))) + (type $10 (func (param i64) (result i32))) + (type $11 (func (param i32) (result i64))) + (type $12 (func (param i32 i64))) + (type $13 (func (param i32 i32 i64))) + (type $14 (func (param i32 i32 i64) (result i32))) + (type $15 (func (result i32))) + (type $16 (func (param f32) (result i32))) + (type $17 (func (param i32) (result f32))) + (type $18 (func (param i32 f32))) + (type $19 (func (param f64) (result i32))) + (type $20 (func (param i32) (result f64))) + (type $21 (func (param i32 f64))) + (type $22 (func (param i32 i32 f32))) + (type $23 (func (param i32 i32 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 576)) + (global $~lib/memory/__data_end i32 (i32.const 644)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33412)) + (global $~lib/memory/__heap_base i32 (i32.const 33412)) + (memory $0 1) + (data $0 (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data $1 (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $2 (i32.const 144) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $3 (i32.const 176) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $4 (i32.const 204) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data $5 (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data $6 (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $7 (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $8 (i32.const 412) "<\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1e\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00s\00e\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data $9 (i32.const 476) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data $10 (i32.const 524) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data $11 (i32.const 576) "\10\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\02\n\00\00\00\00\00\00\02\02\00\00\00\00\00\00\02\19\00\00\00\00\00\00\02\1a\00\00") + (table $0 1 1 funcref) + (elem $0 (i32.const 1)) + (export "memory" (memory $0)) + (start $~start) + (func $~lib/rt/itcms/Object#set:nextWithColor (param $this i32) (param $nextWithColor i32) + local.get $this + local.get $nextWithColor + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=8 + ) + (func $~lib/rt/itcms/initLazy (param $space i32) (result i32) + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $space + local.get $space + call $~lib/rt/itcms/Object#set:prev + local.get $space + return + ) + (func $~lib/rt/itcms/Object#get:nextWithColor (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/itcms/Object#get:next (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + return + ) + (func $~lib/rt/itcms/Object#get:color (param $this i32) (result i32) + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + return + ) + (func $~lib/rt/itcms/visitRoots (param $cookie i32) + (local $pn i32) + (local $iter i32) + local.get $cookie + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $pn + local.get $pn + call $~lib/rt/itcms/Object#get:next + local.set $iter + loop $while-continue|0 + local.get $iter + local.get $pn + i32.ne + if + i32.const 1 + drop + local.get $iter + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $iter + i32.const 20 + i32.add + local.get $cookie + call $~lib/rt/__visit_members + local.get $iter + call $~lib/rt/itcms/Object#get:next + local.set $iter + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $this i32) (param $color i32) + local.get $this + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $color + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/itcms/Object#set:next (param $this i32) (param $obj i32) + local.get $this + local.get $obj + local.get $this + call $~lib/rt/itcms/Object#get:nextWithColor + i32.const 3 + i32.and + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) + (func $~lib/rt/itcms/Object#unlink (param $this i32) + (local $next i32) + (local $prev i32) + local.get $this + call $~lib/rt/itcms/Object#get:next + local.set $next + local.get $next + i32.const 0 + i32.eq + if + i32.const 1 + drop + local.get $this + call $~lib/rt/itcms/Object#get:prev + i32.const 0 + i32.eq + if (result i32) + local.get $this + global.get $~lib/memory/__heap_base + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + return + end + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.set $prev + i32.const 1 + drop + local.get $prev + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $next + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $next + call $~lib/rt/itcms/Object#set:next + ) + (func $~lib/rt/itcms/Object#get:rtId (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/shared/typeinfo/Typeinfo#get:flags (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/__typeinfo (param $id i32) (result i32) + (local $ptr i32) + global.get $~lib/rt/__rtti_base + local.set $ptr + local.get $id + local.get $ptr + i32.load + i32.gt_u + if + i32.const 224 + i32.const 288 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $ptr + i32.const 4 + i32.add + local.get $id + i32.const 4 + i32.mul + i32.add + call $~lib/shared/typeinfo/Typeinfo#get:flags + return + ) + (func $~lib/rt/itcms/Object#get:isPointerfree (param $this i32) (result i32) + (local $rtId i32) + local.get $this + call $~lib/rt/itcms/Object#get:rtId + local.set $rtId + local.get $rtId + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $rtId + call $~lib/rt/__typeinfo + i32.const 32 + i32.and + i32.const 0 + i32.ne + end + return + ) + (func $~lib/rt/itcms/Object#linkTo (param $this i32) (param $list i32) (param $withColor i32) + (local $prev i32) + local.get $list + call $~lib/rt/itcms/Object#get:prev + local.set $prev + local.get $this + local.get $list + local.get $withColor + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $this + local.get $prev + call $~lib/rt/itcms/Object#set:prev + local.get $prev + local.get $this + call $~lib/rt/itcms/Object#set:next + local.get $list + local.get $this + call $~lib/rt/itcms/Object#set:prev + ) + (func $~lib/rt/itcms/Object#makeGray (param $this i32) + (local $1 i32) + local.get $this + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $this + call $~lib/rt/itcms/Object#get:prev + local.tee $1 + i32.eqz + if (result i32) + i32.const 0 + i32.const 96 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + else + local.get $1 + end + global.set $~lib/rt/itcms/iter + end + local.get $this + call $~lib/rt/itcms/Object#unlink + local.get $this + global.get $~lib/rt/itcms/toSpace + local.get $this + call $~lib/rt/itcms/Object#get:isPointerfree + if (result i32) + global.get $~lib/rt/itcms/white + i32.eqz + else + i32.const 2 + end + call $~lib/rt/itcms/Object#linkTo + ) + (func $~lib/rt/itcms/__visit (param $ptr i32) (param $cookie i32) + (local $obj i32) + local.get $ptr + i32.eqz + if + return + end + local.get $ptr + i32.const 20 + i32.sub + local.set $obj + i32.const 0 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $obj + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/rt/itcms/visitStack (param $cookie i32) + (local $ptr i32) + global.get $~lib/memory/__stack_pointer + local.set $ptr + loop $while-continue|0 + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $ptr + i32.load + local.get $cookie + call $~lib/rt/itcms/__visit + local.get $ptr + i32.const 4 + i32.add + local.set $ptr + br $while-continue|0 + end + end + ) + (func $~lib/rt/common/BLOCK#get:mmInfo (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:size (param $this i32) (result i32) + i32.const 4 + local.get $this + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + return + ) + (func $~lib/rt/tlsf/Root#set:flMap (param $this i32) (param $flMap i32) + local.get $this + local.get $flMap + i32.store + ) + (func $~lib/rt/common/BLOCK#set:mmInfo (param $this i32) (param $mmInfo i32) + local.get $this + local.get $mmInfo + i32.store + ) + (func $~lib/rt/tlsf/Block#set:prev (param $this i32) (param $prev i32) + local.get $this + local.get $prev + i32.store offset=4 + ) + (func $~lib/rt/tlsf/Block#set:next (param $this i32) (param $next i32) + local.get $this + local.get $next + i32.store offset=8 + ) + (func $~lib/rt/tlsf/Block#get:prev (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/rt/tlsf/Block#get:next (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/rt/tlsf/Root#get:flMap (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/tlsf/removeBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $6 i32) + (local $7 i32) + (local $boundedSize i32) + (local $prev i32) + (local $next i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $root|14 i32) + (local $fl|15 i32) + (local $sl|16 i32) + (local $head i32) + (local $root|18 i32) + (local $fl|19 i32) + (local $slMap i32) + (local $root|21 i32) + (local $fl|22 i32) + (local $slMap|23 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $6 + i32.const 1073741820 + local.tee $7 + local.get $6 + local.get $7 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/tlsf/Block#get:prev + local.set $prev + local.get $block + call $~lib/rt/tlsf/Block#get:next + local.set $next + local.get $prev + if + local.get $prev + local.get $next + call $~lib/rt/tlsf/Block#set:next + end + local.get $next + if + local.get $next + local.get $prev + call $~lib/rt/tlsf/Block#set:prev + end + local.get $block + block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32) + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.0 + end + i32.eq + if + local.get $root + local.set $root|14 + local.get $fl + local.set $fl|15 + local.get $sl + local.set $sl|16 + local.get $next + local.set $head + local.get $root|14 + local.get $fl|15 + i32.const 4 + i32.shl + local.get $sl|16 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $next + i32.eqz + if + block $~lib/rt/tlsf/GETSL|inlined.0 (result i32) + local.get $root + local.set $root|18 + local.get $fl + local.set $fl|19 + local.get $root|18 + local.get $fl|19 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.0 + end + local.set $slMap + local.get $root + local.set $root|21 + local.get $fl + local.set $fl|22 + local.get $slMap + i32.const 1 + local.get $sl + i32.shl + i32.const -1 + i32.xor + i32.and + local.tee $slMap + local.set $slMap|23 + local.get $root|21 + local.get $fl|22 + i32.const 2 + i32.shl + i32.add + local.get $slMap|23 + i32.store offset=4 + local.get $slMap + i32.eqz + if + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.const -1 + i32.xor + i32.and + call $~lib/rt/tlsf/Root#set:flMap + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $root i32) (param $block i32) + (local $blockInfo i32) + (local $block|3 i32) + (local $right i32) + (local $rightInfo i32) + (local $block|6 i32) + (local $block|7 i32) + (local $left i32) + (local $leftInfo i32) + (local $size i32) + (local $fl i32) + (local $sl i32) + (local $13 i32) + (local $14 i32) + (local $boundedSize i32) + (local $root|16 i32) + (local $fl|17 i32) + (local $sl|18 i32) + (local $head i32) + (local $root|20 i32) + (local $fl|21 i32) + (local $sl|22 i32) + (local $head|23 i32) + (local $root|24 i32) + (local $fl|25 i32) + (local $root|26 i32) + (local $fl|27 i32) + (local $slMap i32) + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $blockInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32) + local.get $block + local.set $block|3 + local.get $block|3 + i32.const 4 + i32.add + local.get $block|3 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.0 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + local.get $rightInfo + i32.const 1 + i32.and + if + local.get $root + local.get $right + call $~lib/rt/tlsf/removeBlock + local.get $block + local.get $blockInfo + i32.const 4 + i32.add + local.get $rightInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.1 + end + local.set $right + local.get $right + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $rightInfo + end + local.get $blockInfo + i32.const 2 + i32.and + if + block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.sub + i32.load + br $~lib/rt/tlsf/GETFREELEFT|inlined.0 + end + local.set $left + local.get $left + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $leftInfo + i32.const 1 + drop + local.get $leftInfo + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $left + call $~lib/rt/tlsf/removeBlock + local.get $left + local.set $block + local.get $block + local.get $leftInfo + i32.const 4 + i32.add + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + local.tee $blockInfo + call $~lib/rt/common/BLOCK#set:mmInfo + end + local.get $right + local.get $rightInfo + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.set $size + i32.const 1 + drop + local.get $size + i32.const 12 + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + drop + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.get $right + i32.eq + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $right + i32.const 4 + i32.sub + local.get $block + i32.store + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + local.tee $13 + i32.const 1073741820 + local.tee $14 + local.get $13 + local.get $14 + i32.lt_u + select + local.set $boundedSize + i32.const 31 + local.get $boundedSize + i32.clz + i32.sub + local.set $fl + local.get $boundedSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32) + local.get $root + local.set $root|16 + local.get $fl + local.set $fl|17 + local.get $sl + local.set $sl|18 + local.get $root|16 + local.get $fl|17 + i32.const 4 + i32.shl + local.get $sl|18 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.1 + end + local.set $head + local.get $block + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $block + local.get $head + call $~lib/rt/tlsf/Block#set:next + local.get $head + if + local.get $head + local.get $block + call $~lib/rt/tlsf/Block#set:prev + end + local.get $root + local.set $root|20 + local.get $fl + local.set $fl|21 + local.get $sl + local.set $sl|22 + local.get $block + local.set $head|23 + local.get $root|20 + local.get $fl|21 + i32.const 4 + i32.shl + local.get $sl|22 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head|23 + i32.store offset=96 + local.get $root + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 1 + local.get $fl + i32.shl + i32.or + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|26 + local.get $fl + local.set $fl|27 + block $~lib/rt/tlsf/GETSL|inlined.1 (result i32) + local.get $root + local.set $root|24 + local.get $fl + local.set $fl|25 + local.get $root|24 + local.get $fl|25 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.1 + end + i32.const 1 + local.get $sl + i32.shl + i32.or + local.set $slMap + local.get $root|26 + local.get $fl|27 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + ) + (func $~lib/rt/tlsf/addMemory (param $root i32) (param $start i32) (param $endU64 i64) (result i32) + (local $end i32) + (local $root|4 i32) + (local $tail i32) + (local $tailInfo i32) + (local $size i32) + (local $leftSize i32) + (local $left i32) + (local $root|10 i32) + (local $tail|11 i32) + local.get $endU64 + i32.wrap_i64 + local.set $end + i32.const 1 + drop + local.get $start + i64.extend_i32_u + local.get $endU64 + i64.le_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + local.set $start + local.get $end + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $end + block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32) + local.get $root + local.set $root|4 + local.get $root|4 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.0 + end + local.set $tail + i32.const 0 + local.set $tailInfo + local.get $tail + if + i32.const 1 + drop + local.get $start + local.get $tail + i32.const 4 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $start + i32.const 16 + i32.sub + local.get $tail + i32.eq + if + local.get $start + i32.const 16 + i32.sub + local.set $start + local.get $tail + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $tailInfo + else + end + else + i32.const 1 + drop + local.get $start + local.get $root + i32.const 1572 + i32.add + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $end + local.get $start + i32.sub + local.set $size + local.get $size + i32.const 4 + i32.const 12 + i32.add + i32.const 4 + i32.add + i32.lt_u + if + i32.const 0 + return + end + local.get $size + i32.const 2 + i32.const 4 + i32.mul + i32.sub + local.set $leftSize + local.get $start + local.set $left + local.get $left + local.get $leftSize + i32.const 1 + i32.or + local.get $tailInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:prev + local.get $left + i32.const 0 + call $~lib/rt/tlsf/Block#set:next + local.get $start + i32.const 4 + i32.add + local.get $leftSize + i32.add + local.set $tail + local.get $tail + i32.const 0 + i32.const 2 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.set $root|10 + local.get $tail + local.set $tail|11 + local.get $root|10 + local.get $tail|11 + i32.store offset=1568 + local.get $root + local.get $left + call $~lib/rt/tlsf/insertBlock + i32.const 1 + return + ) + (func $~lib/rt/tlsf/initialize + (local $rootOffset i32) + (local $pagesBefore i32) + (local $pagesNeeded i32) + (local $root i32) + (local $root|4 i32) + (local $tail i32) + (local $fl i32) + (local $root|7 i32) + (local $fl|8 i32) + (local $slMap i32) + (local $sl i32) + (local $root|11 i32) + (local $fl|12 i32) + (local $sl|13 i32) + (local $head i32) + (local $memStart i32) + i32.const 0 + drop + global.get $~lib/memory/__heap_base + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + local.set $rootOffset + memory.size + local.set $pagesBefore + local.get $rootOffset + i32.const 1572 + i32.add + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesNeeded + local.get $pagesBefore + i32.gt_s + if (result i32) + local.get $pagesNeeded + local.get $pagesBefore + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + local.get $rootOffset + local.set $root + local.get $root + i32.const 0 + call $~lib/rt/tlsf/Root#set:flMap + local.get $root + local.set $root|4 + i32.const 0 + local.set $tail + local.get $root|4 + local.get $tail + i32.store offset=1568 + i32.const 0 + local.set $fl + loop $for-loop|0 + local.get $fl + i32.const 23 + i32.lt_u + if + local.get $root + local.set $root|7 + local.get $fl + local.set $fl|8 + i32.const 0 + local.set $slMap + local.get $root|7 + local.get $fl|8 + i32.const 2 + i32.shl + i32.add + local.get $slMap + i32.store offset=4 + i32.const 0 + local.set $sl + loop $for-loop|1 + local.get $sl + i32.const 16 + i32.lt_u + if + local.get $root + local.set $root|11 + local.get $fl + local.set $fl|12 + local.get $sl + local.set $sl|13 + i32.const 0 + local.set $head + local.get $root|11 + local.get $fl|12 + i32.const 4 + i32.shl + local.get $sl|13 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $head + i32.store offset=96 + local.get $sl + i32.const 1 + i32.add + local.set $sl + br $for-loop|1 + end + end + local.get $fl + i32.const 1 + i32.add + local.set $fl + br $for-loop|0 + end + end + local.get $rootOffset + i32.const 1572 + i32.add + local.set $memStart + i32.const 0 + drop + local.get $root + local.get $memStart + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + local.get $root + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/checkUsedBlock (param $ptr i32) (result i32) + (local $block i32) + local.get $ptr + i32.const 4 + i32.sub + local.set $block + local.get $ptr + i32.const 0 + i32.ne + if (result i32) + local.get $ptr + i32.const 15 + i32.and + i32.eqz + else + i32.const 0 + end + if (result i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.and + i32.eqz + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $block + return + ) + (func $~lib/rt/tlsf/freeBlock (param $root i32) (param $block i32) + i32.const 0 + drop + local.get $block + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $block + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/tlsf/__free (param $ptr i32) + local.get $ptr + global.get $~lib/memory/__heap_base + i32.lt_u + if + return + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $ptr + call $~lib/rt/tlsf/checkUsedBlock + call $~lib/rt/tlsf/freeBlock + ) + (func $~lib/rt/itcms/free (param $obj i32) + local.get $obj + global.get $~lib/memory/__heap_base + i32.lt_u + if + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $obj + i32.const 0 + call $~lib/rt/itcms/Object#set:prev + else + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.sub + global.set $~lib/rt/itcms/total + i32.const 0 + drop + local.get $obj + i32.const 4 + i32.add + call $~lib/rt/tlsf/__free + end + ) + (func $~lib/rt/itcms/step (result i32) + (local $obj i32) + (local $1 i32) + (local $black i32) + (local $from i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + local.set $1 + local.get $1 + i32.const 0 + i32.eq + br_if $case0|0 + local.get $1 + i32.const 1 + i32.eq + br_if $case1|0 + local.get $1 + i32.const 2 + i32.eq + br_if $case2|0 + br $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $black + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|1 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + global.set $~lib/rt/itcms/iter + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + i32.const 0 + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.eq + if + i32.const 0 + call $~lib/rt/itcms/visitStack + global.get $~lib/rt/itcms/iter + call $~lib/rt/itcms/Object#get:next + local.set $obj + loop $while-continue|2 + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:color + local.get $black + i32.ne + if + local.get $obj + local.get $black + call $~lib/rt/itcms/Object#set:color + local.get $obj + i32.const 20 + i32.add + i32.const 0 + call $~lib/rt/__visit_members + end + local.get $obj + call $~lib/rt/itcms/Object#get:next + local.set $obj + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $from + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $from + global.set $~lib/rt/itcms/toSpace + local.get $black + global.set $~lib/rt/itcms/white + local.get $from + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.mul + return + end + global.get $~lib/rt/itcms/iter + local.set $obj + local.get $obj + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $obj + call $~lib/rt/itcms/Object#get:next + global.set $~lib/rt/itcms/iter + i32.const 1 + drop + local.get $obj + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $obj + call $~lib/rt/itcms/free + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:nextWithColor + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + call $~lib/rt/itcms/Object#set:prev + i32.const 0 + global.set $~lib/rt/itcms/state + br $break|0 + end + i32.const 0 + return + ) + (func $~lib/rt/itcms/interrupt + (local $budget i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1024 + i32.const 200 + i32.mul + i32.const 100 + i32.div_u + local.set $budget + loop $do-loop|0 + local.get $budget + call $~lib/rt/itcms/step + i32.sub + local.set $budget + global.get $~lib/rt/itcms/state + i32.const 0 + i32.eq + if + i32.const 0 + drop + i32.const 200 + i32.const 100 + i32.rem_u + i32.const 0 + i32.eq + drop + global.get $~lib/rt/itcms/total + i32.const 200 + i32.const 100 + i32.div_u + i32.mul + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + return + end + local.get $budget + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + i32.const 0 + drop + global.get $~lib/rt/itcms/total + i32.const 1024 + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.mul + i32.add + global.set $~lib/rt/itcms/threshold + i32.const 0 + drop + ) + (func $~lib/rt/tlsf/computeSize (param $size i32) (result i32) + local.get $size + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.add + i32.const 15 + i32.const -1 + i32.xor + i32.and + i32.const 4 + i32.sub + end + return + ) + (func $~lib/rt/tlsf/prepareSize (param $size i32) (result i32) + local.get $size + i32.const 1073741820 + i32.gt_u + if + i32.const 32 + i32.const 368 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $size + call $~lib/rt/tlsf/computeSize + return + ) + (func $~lib/rt/tlsf/roundSize (param $size i32) (result i32) + local.get $size + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $size + i32.const 1 + i32.const 27 + local.get $size + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $size + end + return + ) + (func $~lib/rt/tlsf/searchBlock (param $root i32) (param $size i32) (result i32) + (local $fl i32) + (local $sl i32) + (local $requestSize i32) + (local $root|5 i32) + (local $fl|6 i32) + (local $slMap i32) + (local $head i32) + (local $flMap i32) + (local $root|10 i32) + (local $fl|11 i32) + (local $root|12 i32) + (local $fl|13 i32) + (local $sl|14 i32) + (local $root|15 i32) + (local $fl|16 i32) + (local $sl|17 i32) + local.get $size + i32.const 256 + i32.lt_u + if + i32.const 0 + local.set $fl + local.get $size + i32.const 4 + i32.shr_u + local.set $sl + else + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $requestSize + i32.const 4 + i32.const 8 + i32.mul + i32.const 1 + i32.sub + local.get $requestSize + i32.clz + i32.sub + local.set $fl + local.get $requestSize + local.get $fl + i32.const 4 + i32.sub + i32.shr_u + i32.const 1 + i32.const 4 + i32.shl + i32.xor + local.set $sl + local.get $fl + i32.const 8 + i32.const 1 + i32.sub + i32.sub + local.set $fl + end + i32.const 1 + drop + local.get $fl + i32.const 23 + i32.lt_u + if (result i32) + local.get $sl + i32.const 16 + i32.lt_u + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETSL|inlined.2 (result i32) + local.get $root + local.set $root|5 + local.get $fl + local.set $fl|6 + local.get $root|5 + local.get $fl|6 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.2 + end + i32.const 0 + i32.const -1 + i32.xor + local.get $sl + i32.shl + i32.and + local.set $slMap + i32.const 0 + local.set $head + local.get $slMap + i32.eqz + if + local.get $root + call $~lib/rt/tlsf/Root#get:flMap + i32.const 0 + i32.const -1 + i32.xor + local.get $fl + i32.const 1 + i32.add + i32.shl + i32.and + local.set $flMap + local.get $flMap + i32.eqz + if + i32.const 0 + local.set $head + else + local.get $flMap + i32.ctz + local.set $fl + block $~lib/rt/tlsf/GETSL|inlined.3 (result i32) + local.get $root + local.set $root|10 + local.get $fl + local.set $fl|11 + local.get $root|10 + local.get $fl|11 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + br $~lib/rt/tlsf/GETSL|inlined.3 + end + local.set $slMap + i32.const 1 + drop + local.get $slMap + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32) + local.get $root + local.set $root|12 + local.get $fl + local.set $fl|13 + local.get $slMap + i32.ctz + local.set $sl|14 + local.get $root|12 + local.get $fl|13 + i32.const 4 + i32.shl + local.get $sl|14 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.2 + end + local.set $head + end + else + block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32) + local.get $root + local.set $root|15 + local.get $fl + local.set $fl|16 + local.get $slMap + i32.ctz + local.set $sl|17 + local.get $root|15 + local.get $fl|16 + i32.const 4 + i32.shl + local.get $sl|17 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + br $~lib/rt/tlsf/GETHEAD|inlined.3 + end + local.set $head + end + local.get $head + return + ) + (func $~lib/rt/tlsf/growMemory (param $root i32) (param $size i32) + (local $pagesBefore i32) + (local $root|3 i32) + (local $pagesNeeded i32) + (local $5 i32) + (local $6 i32) + (local $pagesWanted i32) + (local $pagesAfter i32) + i32.const 0 + drop + local.get $size + i32.const 256 + i32.ge_u + if + local.get $size + call $~lib/rt/tlsf/roundSize + local.set $size + end + memory.size + local.set $pagesBefore + local.get $size + i32.const 4 + local.get $pagesBefore + i32.const 16 + i32.shl + i32.const 4 + i32.sub + block $~lib/rt/tlsf/GETTAIL|inlined.1 (result i32) + local.get $root + local.set $root|3 + local.get $root|3 + i32.load offset=1568 + br $~lib/rt/tlsf/GETTAIL|inlined.1 + end + i32.ne + i32.shl + i32.add + local.set $size + local.get $size + i32.const 65535 + i32.add + i32.const 65535 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.shr_u + local.set $pagesNeeded + local.get $pagesBefore + local.tee $5 + local.get $pagesNeeded + local.tee $6 + local.get $5 + local.get $6 + i32.gt_s + select + local.set $pagesWanted + local.get $pagesWanted + memory.grow + i32.const 0 + i32.lt_s + if + local.get $pagesNeeded + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + memory.size + local.set $pagesAfter + local.get $root + local.get $pagesBefore + i32.const 16 + i32.shl + local.get $pagesAfter + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + drop + ) + (func $~lib/rt/tlsf/prepareBlock (param $root i32) (param $block i32) (param $size i32) + (local $blockInfo i32) + (local $remaining i32) + (local $spare i32) + (local $block|6 i32) + (local $block|7 i32) + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + local.set $blockInfo + i32.const 1 + drop + local.get $size + i32.const 4 + i32.add + i32.const 15 + i32.and + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $blockInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $size + i32.sub + local.set $remaining + local.get $remaining + i32.const 4 + i32.const 12 + i32.add + i32.ge_u + if + local.get $block + local.get $size + local.get $blockInfo + i32.const 2 + i32.and + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $block + i32.const 4 + i32.add + local.get $size + i32.add + local.set $spare + local.get $spare + local.get $remaining + i32.const 4 + i32.sub + i32.const 1 + i32.or + call $~lib/rt/common/BLOCK#set:mmInfo + local.get $root + local.get $spare + call $~lib/rt/tlsf/insertBlock + else + local.get $block + local.get $blockInfo + i32.const 1 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32) + local.get $block + local.set $block|7 + local.get $block|7 + i32.const 4 + i32.add + local.get $block|7 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.3 + end + block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32) + local.get $block + local.set $block|6 + local.get $block|6 + i32.const 4 + i32.add + local.get $block|6 + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.add + br $~lib/rt/tlsf/GETRIGHT|inlined.2 + end + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 2 + i32.const -1 + i32.xor + i32.and + call $~lib/rt/common/BLOCK#set:mmInfo + end + ) + (func $~lib/rt/tlsf/allocateBlock (param $root i32) (param $size i32) (result i32) + (local $payloadSize i32) + (local $block i32) + local.get $size + call $~lib/rt/tlsf/prepareSize + local.set $payloadSize + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + local.get $block + i32.eqz + if + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/growMemory + local.get $root + local.get $payloadSize + call $~lib/rt/tlsf/searchBlock + local.set $block + i32.const 1 + drop + local.get $block + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + i32.const 1 + drop + local.get $block + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $payloadSize + i32.ge_u + i32.eqz + if + i32.const 0 + i32.const 368 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $root + local.get $block + call $~lib/rt/tlsf/removeBlock + local.get $root + local.get $block + local.get $payloadSize + call $~lib/rt/tlsf/prepareBlock + i32.const 0 + drop + local.get $block + return + ) + (func $~lib/rt/tlsf/__alloc (param $size i32) (result i32) + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $size + call $~lib/rt/tlsf/allocateBlock + i32.const 4 + i32.add + return + ) + (func $~lib/rt/itcms/Object#set:rtId (param $this i32) (param $rtId i32) + local.get $this + local.get $rtId + i32.store offset=12 + ) + (func $~lib/rt/itcms/Object#set:rtSize (param $this i32) (param $rtSize i32) + local.get $this + local.get $rtSize + i32.store offset=16 + ) + (func $~lib/rt/itcms/__new (param $size i32) (param $id i32) (result i32) + (local $obj i32) + (local $ptr i32) + local.get $size + i32.const 1073741804 + i32.ge_u + if + i32.const 32 + i32.const 96 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + call $~lib/rt/itcms/interrupt + end + i32.const 16 + local.get $size + i32.add + call $~lib/rt/tlsf/__alloc + i32.const 4 + i32.sub + local.set $obj + local.get $obj + local.get $id + call $~lib/rt/itcms/Object#set:rtId + local.get $obj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $obj + global.get $~lib/rt/itcms/fromSpace + global.get $~lib/rt/itcms/white + call $~lib/rt/itcms/Object#linkTo + global.get $~lib/rt/itcms/total + local.get $obj + call $~lib/rt/itcms/Object#get:size + i32.add + global.set $~lib/rt/itcms/total + local.get $obj + i32.const 20 + i32.add + local.set $ptr + local.get $ptr + i32.const 0 + local.get $size + memory.fill + local.get $ptr + return + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) + (local $child i32) + (local $parent i32) + (local $parentColor i32) + local.get $childPtr + i32.eqz + if + return + end + i32.const 1 + drop + local.get $parentPtr + i32.eqz + if + i32.const 0 + i32.const 96 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $childPtr + i32.const 20 + i32.sub + local.set $child + local.get $child + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $parentPtr + i32.const 20 + i32.sub + local.set $parent + local.get $parent + call $~lib/rt/itcms/Object#get:color + local.set $parentColor + local.get $parentColor + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $expectMultiple + if + local.get $parent + call $~lib/rt/itcms/Object#makeGray + else + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $parentColor + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $child + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.0 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:byteLength (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/arraybuffer/ArrayBufferView#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/rt/itcms/Object#get:rtSize (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/rt/itcms/__renew (param $oldPtr i32) (param $size i32) (result i32) + (local $oldObj i32) + (local $newPtr i32) + (local $4 i32) + (local $5 i32) + local.get $oldPtr + i32.const 20 + i32.sub + local.set $oldObj + local.get $size + local.get $oldObj + call $~lib/rt/common/BLOCK#get:mmInfo + i32.const 3 + i32.const -1 + i32.xor + i32.and + i32.const 16 + i32.sub + i32.le_u + if + local.get $oldObj + local.get $size + call $~lib/rt/itcms/Object#set:rtSize + local.get $oldPtr + return + end + local.get $size + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtId + call $~lib/rt/itcms/__new + local.set $newPtr + local.get $newPtr + local.get $oldPtr + local.get $size + local.tee $4 + local.get $oldObj + call $~lib/rt/itcms/Object#get:rtSize + local.tee $5 + local.get $4 + local.get $5 + i32.lt_u + select + memory.copy + local.get $newPtr + return + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + block $~lib/util/hash/hash32|inlined.1 (result i32) + local.get $key + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.1 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key i32) + local.get $this + local.get $key + i32.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 8 + i32.const 4 + i32.le_u + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.0 (result i32) + local.get $key + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.0 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result i64) + local.get $this + i64.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key i64) + local.get $this + local.get $key + i64.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key i64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 8 + i32.const 4 + i32.le_u + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.1 (result i32) + local.get $key + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.1 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result i64) + local.get $this + i64.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key i64) + local.get $this + local.get $key + i64.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key f32) (result i32) + (local $key|1 i32) + (local $len i32) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 4 + i32.const 4 + i32.eq + drop + block $~lib/util/hash/hash32|inlined.2 (result i32) + local.get $key + i32.reinterpret_f32 + local.set $key|1 + i32.const 4 + local.set $len + i32.const 0 + i32.const 374761393 + i32.add + local.get $len + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash32|inlined.2 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result f32) + local.get $this + f32.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key f32) + local.get $this + local.get $key + f32.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSet#set:dataPtr (param $this i32) (param $dataPtr i32) + local.get $this + local.get $dataPtr + i32.store + ) + (func $~lib/fixedset/FixedSet#set:_capacity (param $this i32) (param $_capacity i32) + local.get $this + local.get $_capacity + i32.store offset=4 + ) + (func $~lib/fixedset/FixedSet#set:capacityMask (param $this i32) (param $capacityMask i32) + local.get $this + local.get $capacityMask + i32.store offset=8 + ) + (func $~lib/fixedset/FixedSet#set:_count (param $this i32) (param $_count i32) + local.get $this + local.get $_count + i32.store offset=12 + ) + (func $~lib/fixedset/FixedSet#set:_entriesUsed (param $this i32) (param $_entriesUsed i32) + local.get $this + local.get $_entriesUsed + i32.store offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_count (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/util/hash/HASH (param $key f64) (result i32) + (local $key|1 i64) + (local $h i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop + i32.const 8 + i32.const 4 + i32.eq + drop + i32.const 8 + i32.const 8 + i32.eq + drop + block $~lib/util/hash/hash64|inlined.2 (result i32) + local.get $key + i64.reinterpret_f64 + local.set $key|1 + i32.const 0 + i32.const 374761393 + i32.add + i32.const 8 + i32.add + local.set $h + local.get $h + local.get $key|1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $key|1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + local.set $h + local.get $h + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 15 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -2048144777 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 13 + i32.shr_u + i32.xor + local.set $h + local.get $h + i32.const -1028477379 + i32.mul + local.set $h + local.get $h + local.get $h + i32.const 16 + i32.shr_u + i32.xor + local.set $h + local.get $h + br $~lib/util/hash/hash64|inlined.2 + end + return + ) + (func $~lib/fixedset/FixedSet#get:capacityMask (param $this i32) (result i32) + local.get $this + i32.load offset=8 + ) + (func $~lib/fixedset/FixedSet#get:dataPtr (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:state (param $this i32) (result i32) + local.get $this + i32.load8_u offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#get:hash (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/fixedset/FixedSetSlot#get:key (param $this i32) (result f64) + local.get $this + f64.load offset=8 + ) + (func $~lib/fixedset/FixedSetSlot#set:state (param $this i32) (param $state i32) + local.get $this + local.get $state + i32.store8 offset=4 + ) + (func $~lib/fixedset/FixedSet#get:_entriesUsed (param $this i32) (result i32) + local.get $this + i32.load offset=16 + ) + (func $~lib/fixedset/FixedSet#get:_capacity (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/fixedset/FixedSetSlot#set:hash (param $this i32) (param $hash i32) + local.get $this + local.get $hash + i32.store + ) + (func $~lib/fixedset/FixedSetSlot#set:key (param $this i32) (param $key f64) + local.get $this + local.get $key + f64.store offset=8 + ) + (func $~lib/array/Array#set:buffer (param $this i32) (param $buffer i32) + local.get $this + local.get $buffer + i32.store + local.get $this + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/array/Array#set:dataStart (param $this i32) (param $dataStart i32) + local.get $this + local.get $dataStart + i32.store offset=4 + ) + (func $~lib/array/Array#set:byteLength (param $this i32) (param $byteLength i32) + local.get $this + local.get $byteLength + i32.store offset=8 + ) + (func $~lib/array/Array#set:length_ (param $this i32) (param $length_ i32) + local.get $this + local.get $length_ + i32.store offset=12 + ) + (func $~lib/array/Array#get:length_ (param $this i32) (result i32) + local.get $this + i32.load offset=12 + ) + (func $~lib/array/Array#get:dataStart (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $start:std/fixedset + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testOperators + call $std/fixedset/testCapacity + ) + (func $~start + call $start:std/fixedset + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33440 + i32.const 33488 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key i32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/ensureCapacity (param $array i32) (param $newSize i32) (param $alignLog2 i32) (param $canGrow i32) + (local $oldCapacity i32) + (local $oldData i32) + (local $6 i32) + (local $7 i32) + (local $newCapacity i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $newData i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $oldCapacity + local.get $newSize + local.get $oldCapacity + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + local.get $newSize + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $oldData + local.get $newSize + local.tee $6 + i32.const 8 + local.tee $7 + local.get $6 + local.get $7 + i32.gt_u + select + local.get $alignLog2 + i32.shl + local.set $newCapacity + local.get $canGrow + if + local.get $oldCapacity + i32.const 1 + i32.shl + local.tee $9 + i32.const 1073741820 + local.tee $10 + local.get $9 + local.get $10 + i32.lt_u + select + local.tee $11 + local.get $newCapacity + local.tee $12 + local.get $11 + local.get $12 + i32.gt_u + select + local.set $newCapacity + end + local.get $oldData + local.get $newCapacity + call $~lib/rt/itcms/__renew + local.set $newData + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $newData + local.get $oldData + i32.ne + if + local.get $array + local.get $newData + i32.store + local.get $array + local.get $newData + i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + end + local.get $array + local.get $newCapacity + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k i32) + (local $k|2 i32) + (local $vals i32) + (local $k|4 i32) + (local $k|5 i32) + (local $k|6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i32.const 100 + i32.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i32.const 1 + i32.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i32.const 100 + i32.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + i32.const 1 + i32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + i32.const 50 + i32.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + i32.const 1 + i32.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + i32.const 100 + i32.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i32.const 1 + i32.add + local.set $k|5 + br $for-loop|3 + end + end + i32.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + i32.const 50 + i32.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i32.const 1 + i32.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key i32) (result i32) + (local $this|2 i32) + (local $key|3 i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key i32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + i32.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + i32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k i32) + (local $k|2 i32) + (local $vals i32) + (local $k|4 i32) + (local $k|5 i32) + (local $k|6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i32.const 100 + i32.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i32.const 1 + i32.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i32.const 100 + i32.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + i32.const 1 + i32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + i32.const 50 + i32.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + i32.const 1 + i32.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + i32.const 100 + i32.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i32.const 1 + i32.add + local.set $k|5 + br $for-loop|3 + end + end + i32.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + i32.const 50 + i32.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i32.const 1 + i32.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key i64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + i64.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k i64) + (local $k|2 i64) + (local $vals i32) + (local $k|4 i64) + (local $k|5 i64) + (local $k|6 i64) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i64.const 100 + i64.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i64.const 1 + i64.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i64.const 100 + i64.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + i64.const 1 + i64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + i64.const 50 + i64.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + i64.const 1 + i64.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + i64.const 100 + i64.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i64.const 1 + i64.add + local.set $k|5 + br $for-loop|3 + end + end + i64.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + i64.const 50 + i64.lt_s + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i64.const 1 + i64.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key i64) (result i32) + (local $this|2 i32) + (local $key|3 i64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + i64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key i64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + i64.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + i64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k i64) + (local $k|2 i64) + (local $vals i32) + (local $k|4 i64) + (local $k|5 i64) + (local $k|6 i64) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + i64.const 100 + i64.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + i64.const 1 + i64.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + i64.const 100 + i64.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + i64.const 1 + i64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + i64.const 50 + i64.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + i64.const 1 + i64.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + i64.const 100 + i64.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + i64.const 1 + i64.add + local.set $k|5 + br $for-loop|3 + end + end + i64.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + i64.const 50 + i64.lt_u + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + i64.const 1 + i64.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key f32) (result i32) + (local $this|2 i32) + (local $key|3 f32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + f32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key f32) (result i32) + (local $this|2 i32) + (local $key|3 f32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + f32.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key f32) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + f32.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value f32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 2 + i32.shl + i32.add + local.get $value + f32.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 12 + i32.const 3 + i32.add + i32.const 3 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k f32) + (local $k|2 f32) + (local $vals i32) + (local $k|4 f32) + (local $k|5 f32) + (local $k|6 f32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f32.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k + loop $for-loop|0 + local.get $k + f32.const 100 + f32.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + f32.const 1 + f32.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + f32.const 100 + f32.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + f32.const 1 + f32.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + f32.const 50 + f32.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + f32.const 1 + f32.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + f32.const 100 + f32.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + f32.const 1 + f32.add + local.set $k|5 + br $for-loop|3 + end + end + f32.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + f32.const 50 + f32.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + f32.const 1 + f32.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f32.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f32.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $this i32) (param $initialCapacity i32) (result i32) + (local $cap i32) + (local $bufferSize i32) + (local $ptr i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + local.get $initialCapacity + i32.const 4 + i32.lt_s + if + i32.const 4 + local.set $initialCapacity + end + i32.const 4 + local.set $cap + loop $while-continue|0 + local.get $cap + local.get $initialCapacity + i32.lt_s + if + local.get $cap + i32.const 1 + i32.shl + local.set $cap + br $while-continue|0 + end + end + local.get $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.0 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.0 + end + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $ptr + local.get $ptr + i32.const 0 + local.get $bufferSize + memory.fill + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $ptr + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + local.get $cap + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:capacityMask + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $ptr + i32.const 0 + call $~lib/rt/itcms/__link + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + ) + (func $~lib/fixedset/FixedSet#get:size (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_count + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#has (param $this i32) (param $key f64) (result i32) + (local $this|2 i32) + (local $key|3 f64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $~lib/fixedset/FixedSet#findSlot|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=4 + local.get $12 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.1 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.1 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + f64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.0 + end + i32.const -1 + i32.ne + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/fixedset/FixedSet#delete (param $this i32) (param $key f64) (result i32) + (local $this|2 i32) + (local $key|3 f64) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $slot i32) + (local $state i32) + (local $idx i32) + (local $slot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $this|2 + i32.store + local.get $key + local.set $key|3 + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this|2 + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.2 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.2 + end + local.set $slotSize + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key|3 + f64.eq + else + i32.const 0 + end + if + local.get $i + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + i32.const -1 + br $~lib/fixedset/FixedSet#findSlot|inlined.1 + end + local.set $idx + local.get $idx + i32.const -1 + i32.eq + if + i32.const 0 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.get $idx + block $~lib/fixedset/FS_SLOT_SIZE|inlined.3 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.3 + end + i32.mul + i32.add + local.set $slot|13 + local.get $slot|13 + i32.const 2 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=8 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.sub + call $~lib/fixedset/FixedSet#set:_count + i32.const 1 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/fixedset/FixedSet#rehash (param $this i32) (param $newCapacity i32) + (local $oldData i32) + (local $oldCapacity i32) + (local $slotSize i32) + (local $newMask i32) + (local $bufferSize i32) + (local $newData i32) + (local $i i32) + (local $oldSlot i32) + (local $h i32) + (local $j i32) + (local $newSlot i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $oldData + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $oldCapacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.4 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.4 + end + local.set $slotSize + local.get $newCapacity + i32.const 1 + i32.sub + local.set $newMask + local.get $newCapacity + local.get $slotSize + i32.mul + local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.eq + drop + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.set $newData + local.get $newData + i32.const 0 + local.get $bufferSize + memory.fill + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $oldCapacity + i32.lt_s + if + local.get $oldData + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $oldSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:hash + local.set $h + local.get $h + local.get $newMask + i32.and + local.set $j + loop $while-continue|1 + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 0 + i32.ne + if + local.get $j + i32.const 1 + i32.add + local.get $newMask + i32.and + local.set $j + br $while-continue|1 + end + end + local.get $newData + local.get $j + local.get $slotSize + i32.mul + i32.add + local.set $newSlot + local.get $newSlot + local.get $h + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $newSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $newSlot + local.get $oldSlot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/fixedset/FixedSetSlot#set:key + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newData + call $~lib/fixedset/FixedSet#set:dataPtr + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newCapacity + call $~lib/fixedset/FixedSet#set:_capacity + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $newMask + call $~lib/fixedset/FixedSet#set:capacityMask + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $this + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store offset=4 + local.get $13 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/fixedset/FixedSet#set:_entriesUsed + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.get $newData + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $this i32) (param $key f64) (result i32) + (local $hashCode i32) + (local $mask i32) + (local $start i32) + (local $i i32) + (local $data i32) + (local $slotSize i32) + (local $firstDeleted i32) + (local $slot i32) + (local $state i32) + (local $insertIdx i32) + (local $insertSlot i32) + (local $insertSlot|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 4 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 3 + i32.mul + i32.ge_s + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 2 + i32.mul + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.gt_s + if (result i32) + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + i32.const 1 + i32.shl + else + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_capacity + end + call $~lib/fixedset/FixedSet#rehash + end + local.get $key + call $~lib/util/hash/HASH + local.set $hashCode + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:capacityMask + local.set $mask + local.get $hashCode + local.get $mask + i32.and + local.set $start + local.get $start + local.set $i + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + block $~lib/fixedset/FS_SLOT_SIZE|inlined.5 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.5 + end + local.set $slotSize + i32.const -1 + local.set $firstDeleted + loop $do-loop|0 + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + local.set $state + local.get $state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:hash + local.get $hashCode + i32.eq + if (result i32) + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + local.get $key + f64.eq + else + i32.const 0 + end + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + else + local.get $state + i32.const 255 + i32.and + i32.const 0 + i32.eq + if + local.get $firstDeleted + i32.const -1 + i32.ne + if (result i32) + local.get $firstDeleted + else + local.get $i + end + local.set $insertIdx + local.get $data + local.get $insertIdx + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot + local.get $insertSlot + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_entriesUsed + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_entriesUsed + end + i32.const 0 + drop + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + else + local.get $firstDeleted + i32.const -1 + i32.eq + if + local.get $i + local.set $firstDeleted + end + end + end + local.get $i + i32.const 1 + i32.add + local.get $mask + i32.and + local.set $i + local.get $i + local.get $start + i32.ne + br_if $do-loop|0 + end + local.get $firstDeleted + i32.const -1 + i32.ne + if + local.get $data + local.get $firstDeleted + local.get $slotSize + i32.mul + i32.add + local.set $insertSlot|13 + local.get $insertSlot|13 + local.get $hashCode + call $~lib/fixedset/FixedSetSlot#set:hash + local.get $insertSlot|13 + i32.const 1 + call $~lib/fixedset/FixedSetSlot#set:state + local.get $insertSlot|13 + local.get $key + call $~lib/fixedset/FixedSetSlot#set:key + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store + local.get $14 + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + local.get $14 + i32.store offset=4 + local.get $14 + call $~lib/fixedset/FixedSet#get:_count + i32.const 1 + i32.add + call $~lib/fixedset/FixedSet#set:_count + i32.const 0 + drop + end + local.get $this + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/array/Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $bufferSize i32) + (local $buffer i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + i32.const 0 + call $~lib/array/Array#set:length_ + local.get $length + i32.const 1073741820 + i32.const 3 + i32.shr_u + i32.gt_u + if + i32.const 496 + i32.const 544 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + local.tee $2 + i32.const 8 + local.tee $3 + local.get $2 + local.get $3 + i32.gt_u + select + i32.const 3 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $6 + call $~lib/array/Array#set:buffer + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $buffer + call $~lib/array/Array#set:dataStart + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $bufferSize + call $~lib/array/Array#set:byteLength + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $length + call $~lib/array/Array#set:length_ + local.get $this + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/array/Array#__set (param $this i32) (param $index i32) (param $value f64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:length_ + i32.ge_u + if + local.get $index + i32.const 0 + i32.lt_s + if + i32.const 224 + i32.const 544 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.get $index + i32.const 1 + i32.add + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + i32.const 1 + i32.add + call $~lib/array/Array#set:length_ + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 3 + i32.shl + i32.add + local.get $value + f64.store + i32.const 0 + drop + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $this i32) (param $newLength i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.get $newLength + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $newLength + call $~lib/array/Array#set:length_ + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#values (param $this i32) (result i32) + (local $data i32) + (local $cap i32) + (local $slotSize i32) + (local $values i32) + (local $length i32) + (local $i i32) + (local $slot i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_capacity + local.set $cap + block $~lib/fixedset/FS_SLOT_SIZE|inlined.6 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.6 + end + local.set $slotSize + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $this + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/fixedset/FixedSet#get:_count + call $~lib/array/Array#constructor + local.tee $values + i32.store offset=4 + i32.const 0 + local.set $length + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $cap + i32.lt_s + if + local.get $data + local.get $i + local.get $slotSize + i32.mul + i32.add + local.set $slot + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:state + i32.const 255 + i32.and + i32.const 1 + i32.eq + if + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + local.tee $8 + i32.const 1 + i32.add + local.set $length + local.get $8 + local.get $slot + call $~lib/fixedset/FixedSetSlot#get:key + call $~lib/array/Array#__set + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $length + call $~lib/array/Array#set:length + local.get $values + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/fixedset/FixedSet#clear (param $this i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:dataPtr + i32.const 0 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/fixedset/FixedSet#get:_capacity + block $~lib/fixedset/FS_SLOT_SIZE|inlined.7 (result i32) + i32.const 16 + i32.const 7 + i32.add + i32.const 7 + i32.const -1 + i32.xor + i32.and + br $~lib/fixedset/FS_SLOT_SIZE|inlined.7 + end + i32.mul + memory.fill + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_count + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 0 + call $~lib/fixedset/FixedSet#set:_entriesUsed + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testNumeric + (local $set i32) + (local $k f64) + (local $k|2 f64) + (local $vals i32) + (local $k|4 f64) + (local $k|5 f64) + (local $k|6 f64) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f64.const 0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k + loop $for-loop|0 + local.get $k + f64.const 100 + f64.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k + f64.const 1 + f64.add + local.set $k + br $for-loop|0 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k|2 + loop $for-loop|1 + local.get $k|2 + f64.const 100 + f64.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|2 + call $~lib/fixedset/FixedSet#add + drop + local.get $k|2 + f64.const 1 + f64.add + local.set $k|2 + br $for-loop|1 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#values + local.tee $vals + i32.store offset=8 + local.get $vals + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $k|4 + loop $for-loop|2 + local.get $k|4 + f64.const 50 + f64.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|4 + call $~lib/fixedset/FixedSet#delete + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|4 + f64.const 1 + f64.add + local.set $k|4 + br $for-loop|2 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 50 + local.set $k|5 + loop $for-loop|3 + local.get $k|5 + f64.const 100 + f64.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|5 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|5 + f64.const 1 + f64.add + local.set $k|5 + br $for-loop|3 + end + end + f64.const 0 + local.set $k|6 + loop $for-loop|4 + local.get $k|6 + f64.const 50 + f64.lt + if + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $k|6 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $k|6 + f64.const 1 + f64.add + local.set $k|6 + br $for-loop|4 + end + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#clear + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f64.const 0 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f64.const 1 + call $~lib/fixedset/FixedSet#add + drop + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + f64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__set (param $this i32) (param $key i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $value + if + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $key + call $~lib/fixedset/FixedSet#add + drop + else + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $key + call $~lib/fixedset/FixedSet#delete + drop + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testOperators + (local $set i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 1 + call $~lib/fixedset/FixedSet#__set + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 1 + call $~lib/fixedset/FixedSet#__set + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 0 + call $~lib/fixedset/FixedSet#__set + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 68 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 69 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/fixedset/testCapacity + (local $set i32) + (local $i i32) + (local $i|2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $~lib/fixedset/FixedSet#constructor + local.tee $set + i32.store + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + i32.const 200 + i32.lt_s + if + local.get $set + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $i + call $~lib/fixedset/FixedSet#add + drop + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $set + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + call $~lib/fixedset/FixedSet#get:size + i32.const 200 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 78 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $i|2 + loop $for-loop|1 + local.get $i|2 + i32.const 200 + i32.lt_s + if + local.get $set + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $i|2 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 80 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|2 + i32.const 1 + i32.add + local.set $i|2 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 496 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/fixedset/FixedSet~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/array/Array + block $~lib/fixedset/FixedSet + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/fixedset/FixedSet $~lib/array/Array $~lib/fixedset/FixedSet $~lib/array/Array $~lib/fixedset/FixedSet $~lib/array/Array $~lib/fixedset/FixedSet $~lib/array/Array $~lib/fixedset/FixedSet $~lib/array/Array $~lib/fixedset/FixedSet $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__visit (param $this i32) (param $cookie i32) + (local $data i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/fixedset/FixedSet#get:dataPtr + local.set $data + local.get $data + if + i32.const 0 + drop + local.get $data + local.get $cookie + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) +) diff --git a/tests/compiler/std/fixedset.json b/tests/compiler/std/fixedset.json new file mode 100644 index 0000000000..1bdd02b1be --- /dev/null +++ b/tests/compiler/std/fixedset.json @@ -0,0 +1,4 @@ +{ + "asc_flags": [ + ] +} diff --git a/tests/compiler/std/fixedset.release.wat b/tests/compiler/std/fixedset.release.wat new file mode 100644 index 0000000000..4a45bfd42b --- /dev/null +++ b/tests/compiler/std/fixedset.release.wat @@ -0,0 +1,11243 @@ +(module + (type $0 (func)) + (type $1 (func (param i32 i32))) + (type $2 (func (param i32 i32) (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32) (result i32))) + (type $5 (func (param i32 i64) (result i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 f64) (result i32))) + (type $8 (func (param i32 f32) (result i32))) + (type $9 (func (param i32 i64))) + (type $10 (func (param i32 i32 i32))) + (type $11 (func (param i32 i32 i64))) + (type $12 (func (param i32 f64))) + (type $13 (func (param i32 f32))) + (type $14 (func (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) + (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34436)) + (memory $0 1) + (data $0 (i32.const 1036) "<") + (data $0.1 (i32.const 1048) "\02\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data $1 (i32.const 1100) "<") + (data $1.1 (i32.const 1112) "\02\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data $4 (i32.const 1228) "<") + (data $4.1 (i32.const 1240) "\02\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data $5 (i32.const 1292) ",") + (data $5.1 (i32.const 1304) "\02\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data $7 (i32.const 1372) "<") + (data $7.1 (i32.const 1384) "\02\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data $8 (i32.const 1436) "<") + (data $8.1 (i32.const 1448) "\02\00\00\00\1e\00\00\00s\00t\00d\00/\00f\00i\00x\00e\00d\00s\00e\00t\00.\00t\00s") + (data $9 (i32.const 1500) ",") + (data $9.1 (i32.const 1512) "\02\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data $10 (i32.const 1548) ",") + (data $10.1 (i32.const 1560) "\02\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data $11 (i32.const 1600) "\10\00\00\00 \00\00\00 \00\00\00 ") + (data $11.1 (i32.const 1624) "\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\02\n\00\00\00\00\00\00\02\02\00\00\00\00\00\00\02\19\00\00\00\00\00\00\02\1a") + (export "memory" (memory $0)) + (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#get:size (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1056 + i32.const 1120 + i32.const 261 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt$69 + i32.const 2048 + local.set $2 + loop $do-loop|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if + global.get $~lib/rt/itcms/total + i32.const 1 + i32.shl + i32.const 1024 + i32.add + global.set $~lib/rt/itcms/threshold + br $__inlined_func$~lib/rt/itcms/interrupt$69 + end + local.get $2 + i32.const 0 + i32.gt_s + br_if $do-loop|0 + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.sub + i32.const 1024 + i32.lt_u + i32.const 10 + i32.shl + i32.add + global.set $~lib/rt/itcms/threshold + end + end + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.set $4 + local.get $0 + i32.const 16 + i32.add + local.tee $2 + i32.const 1073741820 + i32.gt_u + if + i32.const 1056 + i32.const 1392 + i32.const 461 + i32.const 29 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + i32.const 12 + i32.le_u + if (result i32) + i32.const 12 + else + local.get $2 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + end + local.tee $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + local.get $5 + i32.const 256 + i32.ge_u + if (result i32) + local.get $5 + i32.const 536870910 + i32.lt_u + if (result i32) + local.get $5 + i32.const 1 + i32.const 27 + local.get $5 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + else + local.get $5 + end + else + local.get $5 + end + i32.const 4 + local.get $4 + i32.load offset=1568 + memory.size + local.tee $2 + i32.const 16 + i32.shl + i32.const 4 + i32.sub + i32.ne + i32.shl + i32.add + i32.const 65535 + i32.add + i32.const -65536 + i32.and + i32.const 16 + i32.shr_u + local.set $3 + local.get $2 + local.get $3 + local.get $2 + local.get $3 + i32.gt_s + select + memory.grow + i32.const 0 + i32.lt_s + if + local.get $3 + memory.grow + i32.const 0 + i32.lt_s + if + unreachable + end + end + local.get $4 + local.get $2 + i32.const 16 + i32.shl + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + local.get $4 + local.get $5 + call $~lib/rt/tlsf/searchBlock + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 499 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + end + local.get $5 + local.get $2 + i32.load + i32.const -4 + i32.and + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 501 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $2 + call $~lib/rt/tlsf/removeBlock + local.get $2 + i32.load + local.set $6 + local.get $5 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const -4 + i32.and + local.get $5 + i32.sub + local.tee $3 + i32.const 16 + i32.ge_u + if + local.get $2 + local.get $5 + local.get $6 + i32.const 2 + i32.and + i32.or + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $5 + i32.add + local.tee $5 + local.get $3 + i32.const 4 + i32.sub + i32.const 1 + i32.or + i32.store + local.get $4 + local.get $5 + call $~lib/rt/tlsf/insertBlock + else + local.get $2 + local.get $6 + i32.const -2 + i32.and + i32.store + local.get $2 + i32.const 4 + i32.add + local.get $2 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $3 + local.get $3 + i32.load + i32.const -3 + i32.and + i32.store + end + local.get $2 + local.get $1 + i32.store offset=12 + local.get $2 + local.get $0 + i32.store offset=16 + global.get $~lib/rt/itcms/fromSpace + local.tee $1 + i32.load offset=8 + local.set $3 + local.get $2 + local.get $1 + global.get $~lib/rt/itcms/white + i32.or + i32.store offset=4 + local.get $2 + local.get $3 + i32.store offset=8 + local.get $3 + local.get $2 + local.get $3 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $1 + local.get $2 + i32.store offset=8 + global.get $~lib/rt/itcms/total + local.get $2 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.add + global.set $~lib/rt/itcms/total + local.get $2 + i32.const 20 + i32.add + local.tee $1 + i32.const 0 + local.get $0 + memory.fill + local.get $1 + ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 295 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + local.get $0 + i32.const 3 + i32.eq + i32.and + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i64.reinterpret_f64 + local.tee $4 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $8 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $7 + local.get $0 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/fixedset/FixedSet#has (param $0 i32) (param $1 f32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $7 + block $~lib/fixedset/FixedSet#findSlot|inlined.0 + loop $do-loop|0 + i32.const -1 + local.set $0 + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $3 + i32.load8_u offset=4 + local.tee $8 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $2 + local.set $0 + local.get $8 + i32.const 1 + i32.eq + if (result i32) + local.get $4 + local.get $3 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $3 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.0 + local.get $6 + local.get $0 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $2 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.const -1 + i32.ne + ) + (func $~lib/rt/itcms/__visit (param $0 i32) + local.get $0 + i32.eqz + if + return + end + global.get $~lib/rt/itcms/white + local.get $0 + i32.const 20 + i32.sub + local.tee $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + call $~lib/rt/itcms/Object#makeGray + global.get $~lib/rt/itcms/visitCount + i32.const 1 + i32.add + global.set $~lib/rt/itcms/visitCount + end + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $7 + local.get $5 + i32.const 1 + i32.sub + local.set $8 + local.get $5 + i32.const 12 + i32.mul + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $9 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $10 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $10 + i32.load + local.tee $4 + local.get $8 + i32.and + local.set $2 + loop $while-continue|1 + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $8 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $10 + i32.load offset=8 + i32.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $9 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $7 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $8 + i32.load8_u offset=4 + local.tee $9 + i32.const 1 + i32.eq + if + local.get $4 + local.get $8 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $8 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $9 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $7 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 12 + i32.mul + i32.add + local.tee $3 + local.get $4 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $6 + local.get $3 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/array/ensureCapacity (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + local.tee $5 + local.get $2 + i32.shr_u + i32.gt_u + if + local.get $1 + i32.const 1073741820 + local.get $2 + i32.shr_u + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 19 + i32.const 48 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $4 + i32.const 8 + local.get $1 + local.get $1 + i32.const 8 + i32.le_u + select + local.get $2 + i32.shl + local.set $1 + local.get $3 + if + i32.const 1073741820 + local.get $5 + i32.const 1 + i32.shl + local.tee $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + local.get $1 + local.get $1 + local.get $2 + i32.lt_u + select + local.set $1 + end + block $__inlined_func$~lib/rt/itcms/__renew$644 + local.get $4 + i32.const 20 + i32.sub + local.tee $3 + i32.load + i32.const -4 + i32.and + i32.const 16 + i32.sub + local.get $1 + i32.ge_u + if + local.get $3 + local.get $1 + i32.store offset=16 + local.get $4 + local.set $2 + br $__inlined_func$~lib/rt/itcms/__renew$644 + end + local.get $1 + local.get $3 + i32.load offset=12 + call $~lib/rt/itcms/__new + local.tee $2 + local.get $4 + local.get $1 + local.get $3 + i32.load offset=16 + local.tee $3 + local.get $1 + local.get $3 + i32.lt_u + select + memory.copy + end + local.get $2 + local.get $4 + i32.ne + if + local.get $0 + local.get $2 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $2 + call $~lib/rt/itcms/__link + end + local.get $0 + local.get $1 + i32.store offset=8 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 i64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $7 + local.get $5 + i32.const 1 + i32.sub + local.set $8 + local.get $5 + i32.const 4 + i32.shl + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $9 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $10 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $10 + i32.load + local.tee $4 + local.get $8 + i32.and + local.set $2 + loop $while-continue|1 + local.get $9 + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $8 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $9 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $10 + i64.load offset=8 + i64.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $9 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $7 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $8 + i32.load8_u offset=4 + local.tee $9 + i32.const 1 + i32.eq + if + local.get $4 + local.get $8 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $8 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $9 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $7 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $4 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $6 + local.get $3 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $7 + local.get $5 + i32.const 1 + i32.sub + local.set $8 + local.get $5 + i32.const 12 + i32.mul + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $9 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $10 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $10 + i32.load + local.tee $4 + local.get $8 + i32.and + local.set $2 + loop $while-continue|1 + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $8 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $10 + i32.load offset=8 + i32.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $9 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $7 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $8 + i32.load8_u offset=4 + local.tee $9 + i32.const 1 + i32.eq + if + local.get $4 + local.get $8 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $8 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $9 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $7 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 12 + i32.mul + i32.add + local.tee $3 + local.get $4 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $6 + local.get $3 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 i64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $7 + local.get $5 + i32.const 1 + i32.sub + local.set $8 + local.get $5 + i32.const 4 + i32.shl + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $9 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $10 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $10 + i32.load + local.tee $4 + local.get $8 + i32.and + local.set $2 + loop $while-continue|1 + local.get $9 + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $8 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $9 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $10 + i64.load offset=8 + i64.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $9 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $7 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $8 + i32.load8_u offset=4 + local.tee $9 + i32.const 1 + i32.eq + if + local.get $4 + local.get $8 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $8 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $9 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $7 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $4 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $6 + local.get $3 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $7 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 f64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $8 + local.get $6 + i32.const 1 + i32.sub + local.set $9 + local.get $6 + i32.const 4 + i32.shl + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $8 + i32.lt_s + if + local.get $7 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $11 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $11 + i32.load + local.tee $5 + local.get $9 + i32.and + local.set $2 + loop $while-continue|1 + local.get $10 + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $9 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $10 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $5 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $11 + f64.load offset=8 + f64.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $10 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $10 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i64.reinterpret_f64 + local.tee $4 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $4 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $8 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $9 + i32.load8_u offset=4 + local.tee $10 + i32.const 1 + i32.eq + if + local.get $5 + local.get $9 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $9 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $10 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $8 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 4 + i32.shl + i32.add + local.tee $3 + local.get $5 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + f64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $7 + local.get $3 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $8 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $2 + local.get $5 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + f64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#add (param $0 i32) (param $1 f32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 2 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 3 + i32.mul + i32.ge_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.shl + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.gt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + i32.const 1 + i32.shl + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load offset=4 + end + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $7 + local.get $5 + i32.const 1 + i32.sub + local.set $8 + local.get $5 + i32.const 12 + i32.mul + local.tee $2 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $9 + i32.const 0 + local.get $2 + memory.fill + loop $for-loop|0 + local.get $3 + local.get $7 + i32.lt_s + if + local.get $6 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $10 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + local.get $10 + i32.load + local.tee $4 + local.get $8 + i32.and + local.set $2 + loop $while-continue|1 + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.load8_u offset=4 + if + local.get $2 + i32.const 1 + i32.add + local.get $8 + i32.and + local.set $2 + br $while-continue|1 + end + end + local.get $9 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $10 + f32.load offset=8 + f32.store offset=8 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $5 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.store offset=16 + local.get $0 + local.get $9 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $4 + local.get $0 + i32.load offset=8 + local.tee $5 + i32.and + local.tee $6 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $7 + i32.const -1 + local.set $2 + block $folding-inner0 + loop $do-loop|0 + local.get $7 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $8 + i32.load8_u offset=4 + local.tee $9 + i32.const 1 + i32.eq + if + local.get $4 + local.get $8 + i32.load + i32.eq + if (result i32) + local.get $1 + local.get $8 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $folding-inner0 + else + local.get $9 + if (result i32) + local.get $3 + local.get $2 + local.get $2 + i32.const -1 + i32.eq + select + else + local.get $7 + local.get $2 + local.get $3 + local.get $2 + i32.const -1 + i32.ne + select + i32.const 12 + i32.mul + i32.add + local.tee $3 + local.get $4 + i32.store + local.get $3 + i32.const 1 + i32.store8 offset=4 + local.get $3 + local.get $1 + f32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=16 + i32.const 1 + i32.add + i32.store offset=16 + end + br $folding-inner0 + end + local.set $2 + end + local.get $6 + local.get $3 + i32.const 1 + i32.add + local.get $5 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + local.get $2 + i32.const -1 + i32.ne + if + local.get $7 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $2 + local.get $4 + i32.store + local.get $2 + i32.const 1 + i32.store8 offset=4 + local.get $2 + local.get $1 + f32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.add + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 268 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const -4 + i32.and + local.tee $3 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 270 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i32.const 256 + i32.lt_u + if (result i32) + local.get $3 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $3 + local.get $3 + i32.const 1073741820 + i32.ge_u + select + local.tee $3 + i32.clz + i32.sub + local.tee $4 + i32.const 7 + i32.sub + local.set $2 + local.get $3 + local.get $4 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $3 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 284 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + local.set $5 + local.get $1 + i32.load offset=4 + local.tee $4 + if + local.get $4 + local.get $5 + i32.store offset=8 + end + local.get $5 + if + local.get $5 + local.get $4 + i32.store offset=4 + end + local.get $1 + local.get $0 + local.get $2 + i32.const 4 + i32.shl + local.get $3 + i32.add + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=96 + i32.eq + if + local.get $1 + local.get $5 + i32.store offset=96 + local.get $5 + i32.eqz + if + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + local.tee $1 + i32.load offset=4 + i32.const -2 + local.get $3 + i32.rotl + i32.and + local.set $3 + local.get $1 + local.get $3 + i32.store offset=4 + local.get $3 + i32.eqz + if + local.get $0 + local.get $0 + i32.load + i32.const -2 + local.get $2 + i32.rotl + i32.and + i32.store + end + end + end + ) + (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + local.get $1 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 201 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + local.tee $3 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 203 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.tee $2 + i32.const 1 + i32.and + if + local.get $0 + local.get $4 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $3 + i32.const 4 + i32.add + local.get $2 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.get $1 + i32.load + i32.const -4 + i32.and + i32.add + local.tee $4 + i32.load + local.set $2 + end + local.get $3 + i32.const 2 + i32.and + if + local.get $1 + i32.const 4 + i32.sub + i32.load + local.tee $1 + i32.load + local.tee $6 + i32.const 1 + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 221 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + call $~lib/rt/tlsf/removeBlock + local.get $1 + local.get $6 + i32.const 4 + i32.add + local.get $3 + i32.const -4 + i32.and + i32.add + local.tee $3 + i32.store + end + local.get $4 + local.get $2 + i32.const 2 + i32.or + i32.store + local.get $3 + i32.const -4 + i32.and + local.tee $2 + i32.const 12 + i32.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 233 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + local.get $1 + i32.const 4 + i32.add + local.get $2 + i32.add + i32.ne + if + i32.const 0 + i32.const 1392 + i32.const 234 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $4 + i32.const 4 + i32.sub + local.get $1 + i32.store + local.get $2 + i32.const 256 + i32.lt_u + if (result i32) + local.get $2 + i32.const 4 + i32.shr_u + else + i32.const 31 + i32.const 1073741820 + local.get $2 + local.get $2 + i32.const 1073741820 + i32.ge_u + select + local.tee $2 + i32.clz + i32.sub + local.tee $3 + i32.const 7 + i32.sub + local.set $5 + local.get $2 + local.get $3 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + end + local.tee $2 + i32.const 16 + i32.lt_u + local.get $5 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 251 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + local.set $3 + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + local.get $3 + i32.store offset=8 + local.get $3 + if + local.get $3 + local.get $1 + i32.store offset=4 + end + local.get $0 + local.get $5 + i32.const 4 + i32.shl + local.get $2 + i32.add + i32.const 2 + i32.shl + i32.add + local.get $1 + i32.store offset=96 + local.get $0 + local.get $0 + i32.load + i32.const 1 + local.get $5 + i32.shl + i32.or + i32.store + local.get $0 + local.get $5 + i32.const 2 + i32.shl + i32.add + local.tee $0 + local.get $0 + i32.load offset=4 + i32.const 1 + local.get $2 + i32.shl + i32.or + i32.store offset=4 + ) + (func $~lib/rt/itcms/Object#makeGray (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + global.get $~lib/rt/itcms/iter + i32.eq + if + local.get $0 + i32.load offset=8 + local.tee $1 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 148 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.get $1 + global.set $~lib/rt/itcms/iter + end + block $__inlined_func$~lib/rt/itcms/Object#unlink$656 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.tee $1 + i32.eqz + if + local.get $0 + i32.load offset=8 + i32.eqz + local.get $0 + i32.const 34436 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 128 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + br $__inlined_func$~lib/rt/itcms/Object#unlink$656 + end + local.get $0 + i32.load offset=8 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1120 + i32.const 132 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $1 + local.get $2 + i32.store offset=8 + local.get $2 + local.get $1 + local.get $2 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + end + global.get $~lib/rt/itcms/toSpace + local.set $2 + local.get $0 + i32.load offset=12 + local.tee $1 + i32.const 2 + i32.le_u + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 1600 + i32.load + i32.gt_u + if + i32.const 1248 + i32.const 1312 + i32.const 22 + i32.const 28 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 2 + i32.shl + i32.const 1604 + i32.add + i32.load + i32.const 32 + i32.and + end + local.set $3 + local.get $2 + i32.load offset=8 + local.set $1 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.const 2 + local.get $3 + select + local.get $2 + i32.or + i32.store offset=4 + local.get $0 + local.get $1 + i32.store offset=8 + local.get $1 + local.get $0 + local.get $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.or + i32.store offset=4 + local.get $2 + local.get $0 + i32.store offset=8 + ) + (func $~lib/rt/__visit_members (param $0 i32) + block $folding-inner2 + block $folding-inner1 + block $folding-inner0 + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $folding-inner0 $folding-inner1 $invalid + end + return + end + return + end + return + end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + return + end + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner2 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i32.load offset=8 + i32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $1 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + i64.load offset=8 + i64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/fixedset/FixedSet#clear (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + i32.const 0 + local.get $0 + i32.load offset=4 + i32.const 4 + i32.shl + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#constructor (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.get $0 + local.get $0 + i32.const 4 + i32.lt_s + select + local.set $2 + i32.const 4 + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $2 + i32.lt_s + if + local.get $0 + i32.const 1 + i32.shl + local.set $0 + br $while-continue|0 + end + end + local.get $0 + i32.const 12 + i32.mul + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $2 + i32.const 0 + local.get $3 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $1 + local.get $2 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/fixedset/FixedSet#clear (param $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + i32.const 0 + local.get $0 + i32.load offset=4 + i32.const 12 + i32.mul + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.const 0 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#__set (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $2 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + else + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#delete + drop + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 f64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i64.reinterpret_f64 + local.tee $5 + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.const 374761401 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.get $5 + i64.const 32 + i64.shr_u + i32.wrap_i64 + i32.const -1028477379 + i32.mul + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + i32.const 15 + i32.shr_u + local.get $2 + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + i32.const 13 + i32.shr_u + local.get $2 + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + i32.const 16 + i32.shr_u + local.get $2 + i32.xor + local.tee $6 + local.get $0 + i32.load offset=8 + local.tee $7 + i32.and + local.tee $8 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $9 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $9 + local.get $3 + i32.const 4 + i32.shl + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $10 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $10 + i32.const 1 + i32.eq + if (result i32) + local.get $6 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f64.load offset=8 + f64.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $8 + local.get $2 + i32.const 1 + i32.add + local.get $7 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/fixedset/FixedSet#delete (param $0 i32) (param $1 f32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + i32.reinterpret_f32 + i32.const -1028477379 + i32.mul + i32.const 374761397 + i32.add + i32.const 17 + i32.rotl + i32.const 668265263 + i32.mul + local.tee $2 + local.get $2 + i32.const 15 + i32.shr_u + i32.xor + i32.const -2048144777 + i32.mul + local.tee $2 + local.get $2 + i32.const 13 + i32.shr_u + i32.xor + i32.const -1028477379 + i32.mul + local.tee $2 + local.get $2 + i32.const 16 + i32.shr_u + i32.xor + local.tee $5 + local.get $0 + i32.load offset=8 + local.tee $6 + i32.and + local.tee $7 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.set $8 + block $~lib/fixedset/FixedSet#findSlot|inlined.1 + loop $do-loop|0 + i32.const -1 + local.set $2 + local.get $8 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $4 + i32.load8_u offset=4 + local.tee $9 + i32.eqz + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $3 + local.set $2 + local.get $9 + i32.const 1 + i32.eq + if (result i32) + local.get $5 + local.get $4 + i32.load + i32.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $4 + f32.load offset=8 + f32.eq + else + i32.const 0 + end + br_if $~lib/fixedset/FixedSet#findSlot|inlined.1 + local.get $7 + local.get $2 + i32.const 1 + i32.add + local.get $6 + i32.and + local.tee $3 + i32.ne + br_if $do-loop|0 + end + i32.const -1 + local.set $2 + end + local.get $2 + i32.const -1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.load + local.get $2 + i32.const 12 + i32.mul + i32.add + i32.const 2 + i32.store8 offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $0 + i32.load offset=12 + i32.const 1 + i32.sub + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + ) + (func $~lib/array/Array#set:length (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.const 3 + i32.const 0 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#set:length (param $0 i32) (param $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.get $1 + i32.const 2 + i32.const 0 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + local.get $1 + i32.const 536870910 + i32.lt_u + if + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub + i32.shl + i32.add + i32.const 1 + i32.sub + local.set $1 + end + local.get $1 + i32.const 31 + local.get $1 + i32.clz + i32.sub + local.tee $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + local.get $2 + i32.const 23 + i32.lt_u + i32.and + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.tee $1 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.tee $2 + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 347 + i32.const 18 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.ctz + local.get $1 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + i32.const 0 + end + end + ) + (func $~lib/rt/tlsf/initialize + (local $0 i32) + (local $1 i32) + memory.size + local.tee $1 + i32.const 0 + i32.le_s + if (result i32) + i32.const 1 + local.get $1 + i32.sub + memory.grow + i32.const 0 + i32.lt_s + else + i32.const 0 + end + if + unreachable + end + i32.const 34448 + i32.const 0 + i32.store + i32.const 36016 + i32.const 0 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 23 + i32.lt_u + if + local.get $0 + i32.const 2 + i32.shl + i32.const 34448 + i32.add + i32.const 0 + i32.store offset=4 + i32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + i32.const 16 + i32.lt_u + if + local.get $0 + i32.const 4 + i32.shl + local.get $1 + i32.add + i32.const 2 + i32.shl + i32.const 34448 + i32.add + i32.const 0 + i32.store offset=96 + local.get $1 + i32.const 1 + i32.add + local.set $1 + br $for-loop|1 + end + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + i32.const 34448 + i32.const 36020 + memory.size + i64.extend_i32_s + i64.const 16 + i64.shl + call $~lib/rt/tlsf/addMemory + i32.const 34448 + global.set $~lib/rt/tlsf/ROOT + ) + (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $2 + local.get $1 + i64.extend_i32_u + i64.lt_u + if + i32.const 0 + i32.const 1392 + i32.const 382 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.set $1 + local.get $0 + i32.load offset=1568 + local.tee $3 + if + local.get $3 + i32.const 4 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 389 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.get $1 + i32.const 16 + i32.sub + local.tee $5 + i32.eq + if + local.get $3 + i32.load + local.set $4 + local.get $5 + local.set $1 + end + else + local.get $0 + i32.const 1572 + i32.add + local.get $1 + i32.gt_u + if + i32.const 0 + i32.const 1392 + i32.const 402 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + end + local.get $2 + i32.wrap_i64 + i32.const -16 + i32.and + local.get $1 + i32.sub + local.tee $3 + i32.const 20 + i32.lt_u + if + return + end + local.get $1 + local.get $4 + i32.const 2 + i32.and + local.get $3 + i32.const 8 + i32.sub + local.tee $3 + i32.const 1 + i32.or + i32.or + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 4 + i32.add + local.get $3 + i32.add + local.tee $3 + i32.const 2 + i32.store + local.get $0 + local.get $3 + i32.store offset=1568 + local.get $0 + local.get $1 + call $~lib/rt/tlsf/insertBlock + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + i32.const 1248 + call $~lib/rt/itcms/__visit + i32.const 1520 + call $~lib/rt/itcms/__visit + i32.const 1056 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 160 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i64) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1568 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 3 + i32.shl + i32.add + local.get $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__set (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + if + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + local.get $1 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1568 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.tee $3 + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~start + call $start:std/fixedset + ) + (func $~lib/rt/itcms/step (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + block $break|0 + block $case2|0 + block $case1|0 + block $case0|0 + global.get $~lib/rt/itcms/state + br_table $case0|0 $case1|0 $case2|0 $break|0 + end + i32.const 1 + global.set $~lib/rt/itcms/state + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/white + i32.eqz + local.set $1 + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|1 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + global.set $~lib/rt/itcms/iter + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + i32.const 0 + global.set $~lib/rt/itcms/visitCount + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + global.get $~lib/rt/itcms/visitCount + return + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|1 + end + end + i32.const 0 + global.set $~lib/rt/itcms/visitCount + call $~lib/rt/itcms/visitRoots + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.set $0 + loop $while-continue|0 + local.get $0 + i32.const 34436 + i32.lt_u + if + local.get $0 + i32.load + call $~lib/rt/itcms/__visit + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 + end + end + global.get $~lib/rt/itcms/iter + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|2 + local.get $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=4 + local.tee $2 + i32.const 3 + i32.and + i32.ne + if + local.get $0 + local.get $2 + i32.const -4 + i32.and + local.get $1 + i32.or + i32.store offset=4 + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + end + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|2 + end + end + global.get $~lib/rt/itcms/fromSpace + local.set $0 + global.get $~lib/rt/itcms/toSpace + global.set $~lib/rt/itcms/fromSpace + local.get $0 + global.set $~lib/rt/itcms/toSpace + local.get $1 + global.set $~lib/rt/itcms/white + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + i32.const 2 + global.set $~lib/rt/itcms/state + end + global.get $~lib/rt/itcms/visitCount + return + end + global.get $~lib/rt/itcms/iter + local.tee $0 + global.get $~lib/rt/itcms/toSpace + i32.ne + if + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const -4 + i32.and + global.set $~lib/rt/itcms/iter + global.get $~lib/rt/itcms/white + i32.eqz + local.get $1 + i32.const 3 + i32.and + i32.ne + if + i32.const 0 + i32.const 1120 + i32.const 229 + i32.const 20 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 34436 + i32.lt_u + if + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + else + global.get $~lib/rt/itcms/total + local.get $0 + i32.load + i32.const -4 + i32.and + i32.const 4 + i32.add + i32.sub + global.set $~lib/rt/itcms/total + local.get $0 + i32.const 4 + i32.add + local.tee $0 + i32.const 34436 + i32.ge_u + if + global.get $~lib/rt/tlsf/ROOT + i32.eqz + if + call $~lib/rt/tlsf/initialize + end + global.get $~lib/rt/tlsf/ROOT + local.get $0 + i32.const 4 + i32.sub + local.set $2 + local.get $0 + i32.const 15 + i32.and + i32.const 1 + local.get $0 + select + if (result i32) + i32.const 1 + else + local.get $2 + i32.load + i32.const 1 + i32.and + end + if + i32.const 0 + i32.const 1392 + i32.const 562 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + local.get $2 + i32.load + i32.const 1 + i32.or + i32.store + local.get $2 + call $~lib/rt/tlsf/insertBlock + end + end + i32.const 10 + return + end + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=4 + global.get $~lib/rt/itcms/toSpace + global.get $~lib/rt/itcms/toSpace + i32.store offset=8 + i32.const 0 + global.set $~lib/rt/itcms/state + end + i32.const 0 + ) + (func $~lib/fixedset/FixedSet#values (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f64) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 15 + call $~lib/rt/itcms/__new + local.tee $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store + local.get $7 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=12 + local.get $6 + i32.const 134217727 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $6 + local.get $6 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $8 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $7 + local.get $0 + i32.store + local.get $7 + local.get $0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + loop $for-loop|0 + local.get $2 + local.get $4 + i32.lt_s + if + local.get $3 + local.get $2 + i32.const 4 + i32.shl + i32.add + local.tee $6 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $1 + local.tee $0 + i32.const 1 + i32.add + local.set $1 + local.get $6 + f64.load offset=8 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $0 + local.get $7 + i32.load offset=12 + i32.ge_u + if + local.get $0 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1568 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $7 + local.get $0 + i32.const 1 + i32.add + local.tee $6 + i32.const 3 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $6 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.load offset=4 + local.get $0 + i32.const 3 + i32.shl + i32.add + local.get $5 + f64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $1 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $~lib/fixedset/FixedSet#values (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 f32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store + local.get $7 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=12 + local.get $6 + i32.const 268435455 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $6 + local.get $6 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $8 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $7 + local.get $0 + i32.store + local.get $7 + local.get $0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + loop $for-loop|0 + local.get $2 + local.get $4 + i32.lt_s + if + local.get $3 + local.get $2 + i32.const 12 + i32.mul + i32.add + local.tee $6 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $1 + local.tee $0 + i32.const 1 + i32.add + local.set $1 + local.get $6 + f32.load offset=8 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $0 + local.get $7 + i32.load offset=12 + i32.ge_u + if + local.get $0 + i32.const 0 + i32.lt_s + if + i32.const 1248 + i32.const 1568 + i32.const 132 + i32.const 22 + call $~lib/builtins/abort + unreachable + end + local.get $7 + local.get $0 + i32.const 1 + i32.add + local.tee $6 + i32.const 2 + i32.const 1 + call $~lib/array/ensureCapacity + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $6 + i32.store offset=12 + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.load offset=4 + local.get $0 + i32.const 2 + i32.shl + i32.add + local.get $5 + f32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + end + local.get $2 + i32.const 1 + i32.add + local.set $2 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $1 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 16 + i32.lt_s + if + local.get $1 + i32.const 1 + i32.shl + local.set $1 + br $while-continue|0 + end + end + local.get $1 + i32.const 4 + i32.shl + local.tee $5 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 0 + local.get $5 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $2 + local.get $6 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store + local.get $9 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 134217727 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $5 + local.get $5 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $10 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $9 + local.get $6 + i32.store + local.get $9 + local.get $6 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + loop $for-loop|00 + local.get $1 + local.get $4 + i32.gt_s + if + local.get $8 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $5 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $0 + local.get $5 + i64.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + i64.const 50 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + i64.const 100 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|3 + end + end + i64.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i64.const 50 + i64.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 16 + i32.lt_s + if + local.get $1 + i32.const 1 + i32.shl + local.set $1 + br $while-continue|0 + end + end + local.get $1 + i32.const 12 + i32.mul + local.tee $4 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $5 + i32.const 0 + local.get $4 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $5 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $2 + local.get $5 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $7 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store + local.get $7 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.store offset=12 + local.get $6 + i32.const 268435455 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $6 + local.get $6 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $8 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=12 + local.get $7 + local.get $0 + i32.store + local.get $7 + local.get $0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $6 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|00 + local.get $1 + local.get $3 + i32.gt_s + if + local.get $5 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $6 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $0 + local.get $6 + i32.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|2 + local.get $0 + i32.const 50 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $0 + loop $for-loop|3 + local.get $0 + i32.const 100 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 + end + end + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 + i32.const 50 + i32.lt_u + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 16 + i32.lt_s + if + local.get $1 + i32.const 1 + i32.shl + local.set $1 + br $while-continue|0 + end + end + local.get $1 + i32.const 4 + i32.shl + local.tee $5 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.const 0 + local.get $5 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $6 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $1 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $2 + local.get $6 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store + local.get $9 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.store offset=12 + local.get $5 + i32.const 134217727 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $5 + local.get $5 + i32.const 8 + i32.le_u + select + i32.const 3 + i32.shl + local.tee $10 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=12 + local.get $9 + local.get $6 + i32.store + local.get $9 + local.get $6 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $6 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $10 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $5 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + loop $for-loop|00 + local.get $1 + local.get $4 + i32.gt_s + if + local.get $8 + local.get $4 + i32.const 4 + i32.shl + i32.add + local.tee $5 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $0 + local.get $5 + i64.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 0 + local.set $3 + loop $for-loop|2 + local.get $3 + i64.const 50 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 50 + local.set $3 + loop $for-loop|3 + local.get $3 + i64.const 100 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|3 + end + end + i64.const 0 + local.set $3 + loop $for-loop|4 + local.get $3 + i64.const 50 + i64.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $3 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $3 + i64.const 1 + i64.add + local.set $3 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner1 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.load offset=4 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.load offset=12 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner1 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $7 + i32.const 268435455 + i32.gt_u + if + i32.const 1520 + i32.const 1568 + i32.const 72 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + local.get $7 + local.get $7 + i32.const 8 + i32.le_u + select + i32.const 2 + i32.shl + local.tee $0 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $8 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=12 + local.get $1 + local.get $8 + i32.store + local.get $1 + local.get $8 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $8 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $7 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + i32.const 0 + local.set $0 + loop $for-loop|00 + local.get $3 + local.get $6 + i32.lt_s + if + local.get $5 + local.get $3 + i32.const 12 + i32.mul + i32.add + local.tee $7 + i32.load8_u offset=4 + i32.const 1 + i32.eq + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + local.get $7 + i32.load offset=8 + call $~lib/array/Array#__set + local.get $0 + i32.const 1 + i32.add + local.set $0 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|00 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + call $~lib/array/Array#set:length + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|2 + local.get $0 + i32.const 50 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 50 + local.set $0 + loop $for-loop|3 + local.get $0 + i32.const 100 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|3 + end + end + i32.const 0 + local.set $0 + loop $for-loop|4 + local.get $0 + i32.const 50 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 f64) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 4 + i32.shl + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 0 + local.get $3 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $0 + local.get $4 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $1 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/fixedset/FixedSet#values + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + f64.const 50 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f64.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + f64.const 100 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|3 + end + end + f64.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f64.const 50 + f64.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f64.const 1 + f64.add + local.set $1 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f64.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $std/fixedset/testNumeric + (local $0 i32) + (local $1 f32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=12 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=16 + i32.const 4 + local.set $2 + loop $while-continue|0 + local.get $2 + i32.const 16 + i32.lt_s + if + local.get $2 + i32.const 1 + i32.shl + local.set $2 + br $while-continue|0 + end + end + local.get $2 + i32.const 12 + i32.mul + local.tee $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $4 + i32.const 0 + local.get $3 + memory.fill + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.const 1 + i32.sub + i32.store offset=8 + local.get $0 + local.get $4 + call $~lib/rt/itcms/__link + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + loop $for-loop|0 + local.get $1 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 11 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 13 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 15 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $1 + loop $for-loop|1 + local.get $1 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 21 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/fixedset/FixedSet#values + local.tee $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 25 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 0 + local.set $1 + loop $for-loop|2 + local.get $1 + f32.const 50 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 29 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#delete + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 30 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 31 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#delete + if + i32.const 0 + i32.const 1456 + i32.const 32 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|2 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + f32.const 50 + local.set $1 + loop $for-loop|3 + local.get $1 + f32.const 100 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 38 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|3 + end + end + f32.const 0 + local.set $1 + loop $for-loop|4 + local.get $1 + f32.const 50 + f32.lt + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 44 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $1 + f32.const 1 + f32.add + local.set $1 + br $for-loop|4 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 100 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#clear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + if + i32.const 0 + i32.const 1456 + i32.const 50 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 0 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 51 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 1 + call $~lib/fixedset/FixedSet#add + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 55 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + f32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) + (func $start:std/fixedset + (local $0 i32) + (local $1 i32) + memory.size + i32.const 16 + i32.shl + i32.const 34436 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store + i32.const 1176 + i32.const 1168 + i32.store + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store + i32.const 1208 + i32.const 1200 + i32.store + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store + i32.const 1352 + i32.const 1344 + i32.store + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + call $std/fixedset/testNumeric + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 16 + call $~lib/fixedset/FixedSet#constructor + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 1 + call $~lib/fixedset/FixedSet#__set + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 1 + call $~lib/fixedset/FixedSet#__set + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + i32.const 0 + call $~lib/fixedset/FixedSet#__set + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 1 + call $~lib/fixedset/FixedSet#has + if + i32.const 0 + i32.const 1456 + i32.const 68 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedset/FixedSet#get:size + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 69 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1668 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + call $~lib/fixedset/FixedSet#constructor + local.tee $1 + i32.store + loop $for-loop|0 + local.get $0 + i32.const 200 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + call $~lib/fixedset/FixedSet#add + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/fixedset/FixedSet#get:size + i32.const 200 + i32.ne + if + i32.const 0 + i32.const 1456 + i32.const 78 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + local.set $0 + loop $for-loop|1 + local.get $0 + i32.const 200 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + local.get $0 + call $~lib/fixedset/FixedSet#has + i32.eqz + if + i32.const 0 + i32.const 1456 + i32.const 80 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + i32.add + local.set $0 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 34464 + i32.const 34512 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) +) diff --git a/tests/compiler/std/fixedset.ts b/tests/compiler/std/fixedset.ts new file mode 100644 index 0000000000..117887eadc --- /dev/null +++ b/tests/compiler/std/fixedset.ts @@ -0,0 +1,91 @@ +function testNumeric(): void { + let set = new FixedSet(); + + // empty set + assert(set.size == 0); + assert(!set.has(0)); + assert(!set.delete(0)); + + // add + for (let k: T = 0; k < 100; ++k) { + assert(!set.has(k)); + set.add(k); + assert(set.has(k)); + } + assert(set.size == 100); + + // add duplicate + for (let k: T = 0; k < 100; ++k) { + set.add(k); + } + assert(set.size == 100); + + // values + let vals = set.values(); + assert(vals.length == 100); + + // delete half + for (let k: T = 0; k < 50; ++k) { + assert(set.has(k)); + assert(set.delete(k)); + assert(!set.has(k)); + assert(!set.delete(k)); + } + assert(set.size == 50); + + // remaining still accessible + for (let k: T = 50; k < 100; ++k) { + assert(set.has(k)); + } + + // re-add after delete + for (let k: T = 0; k < 50; ++k) { + set.add(k); + assert(set.has(k)); + } + assert(set.size == 100); + + // clear + set.clear(); + assert(set.size == 0); + assert(!set.has(0)); + + // add after clear + set.add(1); + assert(set.size == 1); + assert(set.has(1)); +} + +// operator access +function testOperators(): void { + let set = new FixedSet(); + set[1] = true; + set[2] = true; + assert(set[1]); + assert(set[2]); + assert(!set[3]); + set[1] = false; + assert(!set[1]); + assert(set.size == 1); +} + +// custom capacity +function testCapacity(): void { + let set = new FixedSet(4); + for (let i = 0; i < 200; ++i) { + set.add(i); + } + assert(set.size == 200); + for (let i = 0; i < 200; ++i) { + assert(set.has(i)); + } +} + +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testNumeric(); +testOperators(); +testCapacity(); diff --git a/tests/compiler/std/hash.debug.wat b/tests/compiler/std/hash.debug.wat index 12f679f2a3..d903d3716d 100644 --- a/tests/compiler/std/hash.debug.wat +++ b/tests/compiler/std/hash.debug.wat @@ -1,16 +1,18 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param f32) (result i32))) - (type $3 (func (param f64) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param f32) (result i32))) + (type $4 (func (param f64) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/memory/__data_end i32 (i32.const 380)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33148)) (global $~lib/memory/__heap_base i32 (i32.const 33148)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data $1 (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00a\00\00\00\00\00\00\00\00\00\00\00") @@ -886,4 +888,36 @@ local.get $19 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/hash.release.wat b/tests/compiler/std/hash.release.wat index 0b046b6c23..3bde23e65c 100644 --- a/tests/compiler/std/hash.release.wat +++ b/tests/compiler/std/hash.release.wat @@ -1,8 +1,8 @@ (module - (type $0 (func (param i32))) - (type $1 (func)) + (type $0 (func)) + (type $1 (func (param i32))) (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 34172)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -39,17 +39,7 @@ i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1404 - i32.lt_s - if - i32.const 34192 - i32.const 34240 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store @@ -60,9 +50,9 @@ if global.get $~lib/memory/__stack_pointer local.get $0 - local.tee $1 i32.store offset=4 - local.get $1 + local.get $0 + local.tee $1 i32.const 20 i32.sub i32.load offset=16 @@ -225,6 +215,37 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 1404 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 34192 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 34240 + i32.store offset=4 + i32.const 34192 + i32.const 34240 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + unreachable + end + ) (func $~start i32.const 0 call $~lib/util/hash/HASH<~lib/string/String|null> diff --git a/tests/compiler/std/map.debug.wat b/tests/compiler/std/map.debug.wat index 13432055e5..76f2a5bccb 100644 --- a/tests/compiler/std/map.debug.wat +++ b/tests/compiler/std/map.debug.wat @@ -10,15 +10,15 @@ (type $8 (func (param i32 i64))) (type $9 (func (param i32 i64 i32) (result i32))) (type $10 (func (param i32 i64) (result i32))) - (type $11 (func (param i32) (result f32))) - (type $12 (func (param i32 f32))) - (type $13 (func (param i32) (result f64))) - (type $14 (func (param i32 f64))) - (type $15 (func (param i32 f32 i32) (result i32))) - (type $16 (func (param i32 f32) (result i32))) - (type $17 (func (param i32 f64 i32) (result i32))) - (type $18 (func (param i32 f64) (result i32))) - (type $19 (func (param i32 i32 i32 i32))) + (type $11 (func (param i32 i32 i32 i32))) + (type $12 (func (param i32) (result f32))) + (type $13 (func (param i32 f32))) + (type $14 (func (param i32) (result f64))) + (type $15 (func (param i32 f64))) + (type $16 (func (param i32 f32 i32) (result i32))) + (type $17 (func (param i32 f32) (result i32))) + (type $18 (func (param i32 f64 i32) (result i32))) + (type $19 (func (param i32 f64) (result i32))) (type $20 (func (param i64) (result i32))) (type $21 (func (param i32 i32 i64))) (type $22 (func (param i32 i32) (result i64))) @@ -33,7 +33,8 @@ (type $31 (func (param i32 i32 f64))) (type $32 (func (param i32 i32) (result f64))) (type $33 (func (param i32 f64 f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -45,6 +46,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -256,7 +258,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -5228,732 +5230,266 @@ call $"std/map/testNumeric" call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 432 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 592 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit + (func $~start + call $start:std/map ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33664 + i32.const 33712 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $"~lib/map/Map#constructor" (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=8 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + call $"~lib/map/Map#set:buckets" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 4 + i32.const 1 + i32.sub + call $"~lib/map/Map#set:bucketsMask" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + i32.const 0 + i32.const 4 + block $"~lib/map/ENTRY_SIZE|inlined.0" (result i32) + i32.const 12 + br $"~lib/map/ENTRY_SIZE|inlined.0" + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=8 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + call $"~lib/map/Map#set:entries" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 4 + call $"~lib/map/Map#set:entriesCapacity" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 0 + call $"~lib/map/Map#set:entriesOffset" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 0 + call $"~lib/map/Map#set:entriesCount" local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $"~lib/map/Map#__visit" ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $"~lib/map/Map#find" (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:buckets" + local.get $hashCode local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $"~lib/map/Map#get:bucketsMask" + i32.and + i32.const 4 + i32.mul + i32.add i32.load + local.set $entry + loop $while-continue|0 + local.get $entry + if + local.get $entry + call $"~lib/map/MapEntry#get:taggedNext" + local.set $taggedNext + local.get $taggedNext + i32.const 1 + i32.and + i32.eqz + if (result i32) + local.get $entry + call $"~lib/map/MapEntry#get:key" + i32.extend8_s + local.get $key + i32.extend8_s + i32.eq + else + i32.const 0 + end + if + local.get $entry + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + end + local.get $taggedNext + i32.const 1 + i32.const -1 + i32.xor + i32.and + local.set $entry + br $while-continue|0 + end + end + i32.const 0 + local.set $5 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $"~lib/map/Map" - block $"~lib/map/Map" - block $"~lib/map/Map" - block $~lib/array/Array - block $~lib/array/Array - block $"~lib/map/Map" - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"~lib/map/Map" $~lib/array/Array $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - unreachable - ) - (func $~start - call $start:std/map - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33664 - i32.const 33712 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $"~lib/map/Map#constructor" (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 4 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $"~lib/map/Map#set:buckets" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - i32.const 1 - i32.sub - call $"~lib/map/Map#set:bucketsMask" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 4 - block $"~lib/map/ENTRY_SIZE|inlined.0" (result i32) - i32.const 12 - br $"~lib/map/ENTRY_SIZE|inlined.0" - end - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $"~lib/map/Map#set:entries" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - call $"~lib/map/Map#set:entriesCapacity" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - call $"~lib/map/Map#set:entriesOffset" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - call $"~lib/map/Map#set:entriesCount" - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $"~lib/map/Map#find" (param $this i32) (param $key i32) (param $hashCode i32) (result i32) - (local $entry i32) - (local $taggedNext i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $"~lib/map/Map#get:buckets" - local.get $hashCode - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $"~lib/map/Map#get:bucketsMask" - i32.and - i32.const 4 - i32.mul - i32.add - i32.load - local.set $entry - loop $while-continue|0 - local.get $entry - if - local.get $entry - call $"~lib/map/MapEntry#get:taggedNext" - local.set $taggedNext - local.get $taggedNext - i32.const 1 - i32.and - i32.eqz - if (result i32) - local.get $entry - call $"~lib/map/MapEntry#get:key" - i32.extend8_s - local.get $key - i32.extend8_s - i32.eq - else - i32.const 0 - end - if - local.get $entry - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - return - end - local.get $taggedNext - i32.const 1 - i32.const -1 - i32.xor - i32.and - local.set $entry - br $while-continue|0 - end - end - i32.const 0 - local.set $5 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - return - ) - (func $"~lib/map/Map#has" (param $this i32) (param $key i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - local.get $key - local.get $key - call $~lib/util/hash/HASH - call $"~lib/map/Map#find" - i32.const 0 - i32.ne - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return + (func $"~lib/map/Map#has" (param $this i32) (param $key i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $key + local.get $key + call $~lib/util/hash/HASH + call $"~lib/map/Map#find" + i32.const 0 + i32.ne + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return ) (func $"~lib/map/Map#rehash" (param $this i32) (param $newBucketsMask i32) (local $newBucketsCapacity i32) @@ -6385,7 +5921,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -6492,7 +6028,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -6668,6 +6204,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -6708,7 +6248,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -6949,7 +6489,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -7046,7 +6586,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -7472,7 +7012,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -7524,7 +7064,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10074,7 +9614,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -10181,7 +9721,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -10278,7 +9818,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10705,7 +10245,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -12748,7 +12288,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -12855,7 +12395,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -12952,7 +12492,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -13379,7 +12919,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -15422,7 +14962,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -15529,7 +15069,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -15626,7 +15166,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -16053,7 +15593,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -17510,7 +17050,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -19257,7 +18797,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -19364,7 +18904,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -19461,7 +19001,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -19888,7 +19428,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -21925,7 +21465,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -22032,7 +21572,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -22129,7 +21669,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -22557,7 +22097,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -24602,7 +24142,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -24709,7 +24249,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -24806,7 +24346,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -25234,7 +24774,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -27279,7 +26819,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -27386,7 +26926,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -27483,7 +27023,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -27911,7 +27451,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -29956,7 +29496,7 @@ if i32.const 592 i32.const 656 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -30063,7 +29603,7 @@ if i32.const 432 i32.const 704 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -30160,7 +29700,7 @@ if i32.const 224 i32.const 704 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -30588,7 +30128,7 @@ if i32.const 224 i32.const 704 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -31992,6 +31532,545 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 432 + i32.const 480 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 432 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 592 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $"~lib/map/Map" + block $"~lib/map/Map" + block $"~lib/map/Map" + block $~lib/array/Array + block $~lib/array/Array + block $"~lib/map/Map" + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"~lib/map/Map" $~lib/array/Array $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $"~lib/map/Map" $~lib/array/Array $"~lib/map/Map" $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + unreachable + ) (func $"~lib/map/Map#__visit" (param $this i32) (param $cookie i32) (local $entries i32) (local $3 i32) @@ -32003,6 +32082,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32040,6 +32123,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32066,6 +32153,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32093,6 +32184,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32131,6 +32226,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32169,6 +32268,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32206,6 +32309,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32233,6 +32340,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32271,6 +32382,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32308,6 +32423,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32335,6 +32454,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32373,6 +32496,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32410,6 +32537,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32437,6 +32568,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32475,6 +32610,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32512,6 +32651,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32539,6 +32682,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32577,6 +32724,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32614,6 +32765,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32641,6 +32796,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32679,6 +32838,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32716,6 +32879,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32743,6 +32910,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32781,6 +32952,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32818,6 +32993,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32845,6 +33024,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32883,6 +33066,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32920,6 +33107,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -32947,6 +33138,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -32974,45 +33169,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) - (local $buffer i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - i32.const 1073741820 - i32.gt_u - if - i32.const 432 - i32.const 480 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $buffer - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) ) diff --git a/tests/compiler/std/map.release.wat b/tests/compiler/std/map.release.wat index 112ed92024..cf97c662ab 100644 --- a/tests/compiler/std/map.release.wat +++ b/tests/compiler/std/map.release.wat @@ -24,7 +24,7 @@ (type $22 (func (param i32 f32))) (type $23 (func (param i32 f64 f64))) (type $24 (func (param i32 f32 f32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -62,6 +62,41 @@ (data $14 (i32.const 1760) "!\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\10\89\10\00B\08\00\00\02\t\00\00P\88\10\00\10\t\12\00\10\89\00\00B\00\00\00P\80\00\00\10\t\11\00\82\08\00\00\90\08\11\00\10\t\01\00\82\00\00\00\90\00\01\00\10\t\02\00\02\01\00\00\10\01\02\00\10\t\14\00\02\n\00\00\10\n\14\00\10\t\04\00\02\02\00\00\10\02\04\00\10\t2\00\02\19\00\00\10\192\00\10\t4\00\02\1a\00\00\10\1a4") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1896 + i32.lt_s + if + i32.const 34688 + i32.const 34736 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) local.get $1 i32.eqz @@ -1458,7 +1493,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1557,7 +1592,7 @@ select local.set $1 end - block $__inlined_func$~lib/rt/itcms/__renew$1377 + block $__inlined_func$~lib/rt/itcms/__renew$1372 local.get $4 i32.const 20 i32.sub @@ -1575,7 +1610,7 @@ i32.store offset=16 local.get $4 local.set $2 - br $__inlined_func$~lib/rt/itcms/__renew$1377 + br $__inlined_func$~lib/rt/itcms/__renew$1372 end local.get $1 local.get $3 @@ -2339,7 +2374,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2497,7 +2532,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2641,7 +2676,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2713,7 +2748,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2860,7 +2895,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2942,7 +2977,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3086,7 +3121,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3231,7 +3266,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3316,7 +3351,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3461,7 +3496,7 @@ if i32.const 1616 i32.const 1680 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3507,7 +3542,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3958,7 +3993,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$1422 + block $__inlined_func$~lib/rt/itcms/Object#unlink$1423 local.get $0 i32.load offset=4 i32.const -4 @@ -3982,7 +4017,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$1422 + br $__inlined_func$~lib/rt/itcms/Object#unlink$1423 end local.get $0 i32.load offset=8 @@ -4025,7 +4060,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -6194,7 +6229,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -10073,7 +10108,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10141,7 +10176,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10246,7 +10281,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10447,7 +10482,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1383" + block $"__inlined_func$~lib/map/Map#find$1378" loop $while-continue|0 local.get $3 if @@ -10471,7 +10506,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1383" + br $"__inlined_func$~lib/map/Map#find$1378" end local.get $4 i32.const -2 @@ -10898,7 +10933,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1408" + block $"__inlined_func$~lib/map/Map#find$1403" loop $while-continue|0 local.get $3 if @@ -10920,7 +10955,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1408" + br $"__inlined_func$~lib/map/Map#find$1403" end local.get $4 i32.const -2 @@ -11724,7 +11759,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1393" + block $"__inlined_func$~lib/map/Map#find$1388" loop $while-continue|0 local.get $3 if @@ -11748,7 +11783,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1393" + br $"__inlined_func$~lib/map/Map#find$1388" end local.get $4 i32.const -2 @@ -12165,7 +12200,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1378" + block $"__inlined_func$~lib/map/Map#find$1373" loop $while-continue|0 local.get $3 if @@ -12189,7 +12224,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1378" + br $"__inlined_func$~lib/map/Map#find$1373" end local.get $4 i32.const -2 @@ -12616,7 +12651,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1403" + block $"__inlined_func$~lib/map/Map#find$1398" loop $while-continue|0 local.get $3 if @@ -12638,7 +12673,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1403" + br $"__inlined_func$~lib/map/Map#find$1398" end local.get $4 i32.const -2 @@ -13067,7 +13102,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1388" + block $"__inlined_func$~lib/map/Map#find$1383" loop $while-continue|0 local.get $3 if @@ -13091,7 +13126,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1388" + br $"__inlined_func$~lib/map/Map#find$1383" end local.get $4 i32.const -2 @@ -13507,7 +13542,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -13614,7 +13649,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -13777,7 +13812,7 @@ i32.add i32.load local.set $3 - block $"__inlined_func$~lib/map/Map#find$1418" + block $"__inlined_func$~lib/map/Map#find$1413" loop $while-continue|0 local.get $3 if @@ -13799,7 +13834,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $"__inlined_func$~lib/map/Map#find$1418" + br $"__inlined_func$~lib/map/Map#find$1413" end local.get $4 i32.const -2 @@ -14229,7 +14264,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -14336,7 +14371,7 @@ if i32.const 1248 i32.const 1728 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -15148,7 +15183,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -15377,7 +15412,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -16066,7 +16101,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -16297,7 +16332,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -16985,7 +17020,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -17216,7 +17251,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -17901,7 +17936,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -18132,7 +18167,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -18817,7 +18852,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -19046,7 +19081,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -19735,7 +19770,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -19966,7 +20001,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -21275,7 +21310,7 @@ if i32.const 1456 i32.const 1728 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -21506,7 +21541,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -22248,7 +22283,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -22993,7 +23028,7 @@ if i32.const 1248 i32.const 1728 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/math.debug.wat b/tests/compiler/std/math.debug.wat index 5589c2107b..cdce966d26 100644 --- a/tests/compiler/std/math.debug.wat +++ b/tests/compiler/std/math.debug.wat @@ -8,11 +8,11 @@ (type $6 (func (param f32 f32 f32 f32 i32) (result i32))) (type $7 (func (param f32 f32) (result f32))) (type $8 (func (result f64))) - (type $9 (func (param f64) (result i32))) - (type $10 (func)) - (type $11 (func (param f64 i32) (result f64))) - (type $12 (func (param f64 f64 f64) (result f64))) - (type $13 (func (param i32 i32 i32 i32))) + (type $9 (func)) + (type $10 (func (param f64) (result i32))) + (type $11 (func (param i32 i32 i32 i32))) + (type $12 (func (param f64 i32) (result f64))) + (type $13 (func (param f64 f64 f64) (result f64))) (type $14 (func (param f32) (result i32))) (type $15 (func (param f32 i32) (result f32))) (type $16 (func (param f32 f32 f32) (result f32))) @@ -36,7 +36,7 @@ (import "env" "Math.PI" (global $~lib/bindings/dom/Math.PI f64)) (import "env" "Math.SQRT1_2" (global $~lib/bindings/dom/Math.SQRT1_2 f64)) (import "env" "Math.SQRT2" (global $~lib/bindings/dom/Math.SQRT2 f64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "Math.abs" (func $~lib/bindings/dom/Math.abs (param f64) (result f64))) (import "env" "Math.acos" (func $~lib/bindings/dom/Math.acos (param f64) (result f64))) (import "env" "Math.acosh" (func $~lib/bindings/dom/Math.acosh (param f64) (result f64))) @@ -79,6 +79,7 @@ (global $std/math/kTwo120 f64 (f64.const 1329227995784915872903807e12)) (global $~lib/math/NativeMath.E f64 (f64.const 2.718281828459045)) (global $~lib/math/NativeMathf.E f32 (f32.const 2.7182817459106445)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/math/NativeMath.LN2 f64 (f64.const 0.6931471805599453)) (global $~lib/math/NativeMath.LN10 f64 (f64.const 2.302585092994046)) (global $~lib/math/NativeMath.LOG2E f64 (f64.const 1.4426950408889634)) @@ -60243,4 +60244,49 @@ (func $~start call $start:std/math ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 46144 + i32.const 46192 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/math.release.wat b/tests/compiler/std/math.release.wat index 244d0cc93e..fc7e0c9af0 100644 --- a/tests/compiler/std/math.release.wat +++ b/tests/compiler/std/math.release.wat @@ -6,11 +6,11 @@ (type $4 (func (param f64 f64) (result f64))) (type $5 (func (param f32 f32) (result f32))) (type $6 (func (param f64 f64 f64 f64) (result i32))) - (type $7 (func (param f64 f64) (result i32))) - (type $8 (func (param f32 f32) (result i32))) - (type $9 (func (result f64))) - (type $10 (func)) - (type $11 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param f64 f64) (result i32))) + (type $9 (func (param f32 f32) (result i32))) + (type $10 (func (result f64))) + (type $11 (func)) (type $12 (func (param f64 i32) (result f64))) (type $13 (func (param i64 i64) (result i64))) (type $14 (func (param f32 f32 f32 f32) (result i32))) @@ -25,7 +25,6 @@ (import "env" "Math.PI" (global $~lib/bindings/dom/Math.PI f64)) (import "env" "Math.SQRT1_2" (global $~lib/bindings/dom/Math.SQRT1_2 f64)) (import "env" "Math.SQRT2" (global $~lib/bindings/dom/Math.SQRT2 f64)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "Math.cos" (func $~lib/bindings/dom/Math.cos (param f64) (result f64))) (import "env" "Math.sqrt" (func $~lib/bindings/dom/Math.sqrt (param f64) (result f64))) (import "env" "Math.tan" (func $~lib/bindings/dom/Math.tan (param f64) (result f64))) @@ -45,6 +44,7 @@ (import "env" "seed" (func $~lib/builtins/seed (result f64))) (import "env" "Math.random" (func $~lib/bindings/dom/Math.random (result f64))) (import "env" "Math.pow" (func $~lib/bindings/dom/Math.pow (param f64 f64) (result f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "Math.tanh" (func $~lib/bindings/dom/Math.tanh (param f64) (result f64))) (import "env" "Math.sinh" (func $~lib/bindings/dom/Math.sinh (param f64) (result f64))) (import "env" "Math.sign" (func $~lib/bindings/dom/Math.sign (param f64) (result f64))) @@ -68,6 +68,7 @@ (global $~lib/math/random_state0_32 (mut i32) (i32.const 0)) (global $~lib/math/random_state1_32 (mut i32) (i32.const 0)) (global $~lib/math/random_seeded (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 47136)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\16\00\00\00s\00t\00d\00/\00m\00a\00t\00h\00.\00t\00s") @@ -212,6 +213,41 @@ (data $11.128 (i32.const 14353) "`Y\df\bd\d5\d5?\dce\a4\08*\0b\n\bd") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 14368 + i32.lt_s + if + i32.const 47168 + i32.const 47216 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $std/math/check (param $0 f64) (param $1 f64) (param $2 f64) (result i32) (local $3 i32) local.get $0 @@ -230,7 +266,7 @@ f64.ne return end - block $__inlined_func$std/math/ulperr$1077 (result f64) + block $__inlined_func$std/math/ulperr$1078 (result f64) f64.const 0 local.get $1 local.get $1 @@ -239,7 +275,7 @@ local.get $0 f64.ne i32.and - br_if $__inlined_func$std/math/ulperr$1077 + br_if $__inlined_func$std/math/ulperr$1078 drop local.get $0 local.get $1 @@ -257,10 +293,10 @@ i64.shr_u i32.wrap_i64 i32.eq - br_if $__inlined_func$std/math/ulperr$1077 + br_if $__inlined_func$std/math/ulperr$1078 drop f64.const inf - br $__inlined_func$std/math/ulperr$1077 + br $__inlined_func$std/math/ulperr$1078 end local.get $0 local.get $0 @@ -326,7 +362,7 @@ f32.ne return end - block $__inlined_func$std/math/ulperrf$1078 (result f32) + block $__inlined_func$std/math/ulperrf$1079 (result f32) f32.const 0 local.get $1 local.get $1 @@ -335,7 +371,7 @@ local.get $0 f32.ne i32.and - br_if $__inlined_func$std/math/ulperrf$1078 + br_if $__inlined_func$std/math/ulperrf$1079 drop local.get $0 local.get $1 @@ -351,10 +387,10 @@ i32.const 31 i32.shr_u i32.eq - br_if $__inlined_func$std/math/ulperrf$1078 + br_if $__inlined_func$std/math/ulperrf$1079 drop f32.const inf - br $__inlined_func$std/math/ulperrf$1078 + br $__inlined_func$std/math/ulperrf$1079 end local.get $0 local.get $0 diff --git a/tests/compiler/std/mod.debug.wat b/tests/compiler/std/mod.debug.wat index e83e1bff7e..e7f3d6033a 100644 --- a/tests/compiler/std/mod.debug.wat +++ b/tests/compiler/std/mod.debug.wat @@ -1,15 +1,16 @@ (module - (type $0 (func (param f64 f64) (result f64))) - (type $1 (func)) - (type $2 (func (param f64 f64) (result i32))) - (type $3 (func (param f64 f64 f64) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param f64 f64) (result f64))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param f64 f64) (result i32))) + (type $4 (func (param f64 f64 f64) (result i32))) (type $5 (func (param f32 f32) (result f32))) (type $6 (func (param f32 f32) (result i32))) (type $7 (func (param f32 f32 f32) (result i32))) (import "mod" "mod" (func $std/mod/mod (param f64 f64) (result f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/mod/js i32 (i32.const 1)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -2395,4 +2396,49 @@ (func $~start call $start:std/mod ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/mod.release.wat b/tests/compiler/std/mod.release.wat index 568ccb771c..8a641309a7 100644 --- a/tests/compiler/std/mod.release.wat +++ b/tests/compiler/std/mod.release.wat @@ -1,17 +1,53 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) (type $2 (func (param f64 f64 f64) (result i32))) (type $3 (func (param f32 f32 f32) (result i32))) (type $4 (func (param f64 f64) (result f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) (import "mod" "mod" (func $std/mod/mod (param f64 f64) (result f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\14\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s") (export "mod" (func $std/mod/mod)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $std/mod/test_fmod (param $0 f64) (param $1 f64) (param $2 f64) (result i32) (local $3 i64) (local $4 f64) @@ -520,7 +556,6 @@ i32.const 0 i32.const 1056 i32.const 19 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -533,7 +568,6 @@ i32.const 0 i32.const 1056 i32.const 20 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -546,7 +580,6 @@ i32.const 0 i32.const 1056 i32.const 21 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -559,7 +592,6 @@ i32.const 0 i32.const 1056 i32.const 22 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -572,7 +604,6 @@ i32.const 0 i32.const 1056 i32.const 23 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -585,7 +616,6 @@ i32.const 0 i32.const 1056 i32.const 24 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -598,7 +628,6 @@ i32.const 0 i32.const 1056 i32.const 25 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -611,7 +640,6 @@ i32.const 0 i32.const 1056 i32.const 26 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -624,7 +652,6 @@ i32.const 0 i32.const 1056 i32.const 27 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -637,7 +664,6 @@ i32.const 0 i32.const 1056 i32.const 28 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -650,7 +676,6 @@ i32.const 0 i32.const 1056 i32.const 29 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -663,7 +688,6 @@ i32.const 0 i32.const 1056 i32.const 30 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -676,7 +700,6 @@ i32.const 0 i32.const 1056 i32.const 31 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -689,7 +712,6 @@ i32.const 0 i32.const 1056 i32.const 32 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -702,7 +724,6 @@ i32.const 0 i32.const 1056 i32.const 33 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -715,7 +736,6 @@ i32.const 0 i32.const 1056 i32.const 34 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -728,7 +748,6 @@ i32.const 0 i32.const 1056 i32.const 35 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -741,7 +760,6 @@ i32.const 0 i32.const 1056 i32.const 36 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -754,7 +772,6 @@ i32.const 0 i32.const 1056 i32.const 37 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -767,7 +784,6 @@ i32.const 0 i32.const 1056 i32.const 38 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -780,7 +796,6 @@ i32.const 0 i32.const 1056 i32.const 39 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -793,7 +808,6 @@ i32.const 0 i32.const 1056 i32.const 40 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -806,7 +820,6 @@ i32.const 0 i32.const 1056 i32.const 41 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -819,7 +832,6 @@ i32.const 0 i32.const 1056 i32.const 42 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -832,7 +844,6 @@ i32.const 0 i32.const 1056 i32.const 43 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -845,7 +856,6 @@ i32.const 0 i32.const 1056 i32.const 44 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -858,7 +868,6 @@ i32.const 0 i32.const 1056 i32.const 45 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -871,7 +880,6 @@ i32.const 0 i32.const 1056 i32.const 46 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -884,7 +892,6 @@ i32.const 0 i32.const 1056 i32.const 47 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -897,7 +904,6 @@ i32.const 0 i32.const 1056 i32.const 50 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -910,7 +916,6 @@ i32.const 0 i32.const 1056 i32.const 51 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -923,7 +928,6 @@ i32.const 0 i32.const 1056 i32.const 52 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -936,7 +940,6 @@ i32.const 0 i32.const 1056 i32.const 53 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -949,7 +952,6 @@ i32.const 0 i32.const 1056 i32.const 54 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -962,7 +964,6 @@ i32.const 0 i32.const 1056 i32.const 55 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -975,7 +976,6 @@ i32.const 0 i32.const 1056 i32.const 56 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -988,7 +988,6 @@ i32.const 0 i32.const 1056 i32.const 57 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1001,7 +1000,6 @@ i32.const 0 i32.const 1056 i32.const 58 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1014,7 +1012,6 @@ i32.const 0 i32.const 1056 i32.const 59 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1027,7 +1024,6 @@ i32.const 0 i32.const 1056 i32.const 60 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1040,7 +1036,6 @@ i32.const 0 i32.const 1056 i32.const 61 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1053,7 +1048,6 @@ i32.const 0 i32.const 1056 i32.const 62 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1066,7 +1060,6 @@ i32.const 0 i32.const 1056 i32.const 63 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1079,7 +1072,6 @@ i32.const 0 i32.const 1056 i32.const 64 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1092,7 +1084,6 @@ i32.const 0 i32.const 1056 i32.const 65 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1105,7 +1096,6 @@ i32.const 0 i32.const 1056 i32.const 66 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1118,7 +1108,6 @@ i32.const 0 i32.const 1056 i32.const 67 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1131,7 +1120,6 @@ i32.const 0 i32.const 1056 i32.const 68 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1144,7 +1132,6 @@ i32.const 0 i32.const 1056 i32.const 69 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1157,7 +1144,6 @@ i32.const 0 i32.const 1056 i32.const 70 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1170,7 +1156,6 @@ i32.const 0 i32.const 1056 i32.const 71 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1183,7 +1168,6 @@ i32.const 0 i32.const 1056 i32.const 72 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1196,7 +1180,6 @@ i32.const 0 i32.const 1056 i32.const 73 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1209,7 +1192,6 @@ i32.const 0 i32.const 1056 i32.const 74 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1222,7 +1204,6 @@ i32.const 0 i32.const 1056 i32.const 75 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1235,7 +1216,6 @@ i32.const 0 i32.const 1056 i32.const 76 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1248,7 +1228,6 @@ i32.const 0 i32.const 1056 i32.const 77 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1261,7 +1240,6 @@ i32.const 0 i32.const 1056 i32.const 78 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1274,7 +1252,6 @@ i32.const 0 i32.const 1056 i32.const 79 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1287,7 +1264,6 @@ i32.const 0 i32.const 1056 i32.const 80 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1300,7 +1276,6 @@ i32.const 0 i32.const 1056 i32.const 81 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1313,7 +1288,6 @@ i32.const 0 i32.const 1056 i32.const 82 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1326,7 +1300,6 @@ i32.const 0 i32.const 1056 i32.const 83 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1339,7 +1312,6 @@ i32.const 0 i32.const 1056 i32.const 84 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1352,7 +1324,6 @@ i32.const 0 i32.const 1056 i32.const 85 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1365,7 +1336,6 @@ i32.const 0 i32.const 1056 i32.const 86 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1378,7 +1348,6 @@ i32.const 0 i32.const 1056 i32.const 87 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1391,7 +1360,6 @@ i32.const 0 i32.const 1056 i32.const 88 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1404,7 +1372,6 @@ i32.const 0 i32.const 1056 i32.const 89 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1417,7 +1384,6 @@ i32.const 0 i32.const 1056 i32.const 90 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1430,7 +1396,6 @@ i32.const 0 i32.const 1056 i32.const 91 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1443,7 +1408,6 @@ i32.const 0 i32.const 1056 i32.const 92 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1456,7 +1420,6 @@ i32.const 0 i32.const 1056 i32.const 93 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1469,7 +1432,6 @@ i32.const 0 i32.const 1056 i32.const 94 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1482,7 +1444,6 @@ i32.const 0 i32.const 1056 i32.const 103 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1495,7 +1456,6 @@ i32.const 0 i32.const 1056 i32.const 104 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1508,7 +1468,6 @@ i32.const 0 i32.const 1056 i32.const 105 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1521,7 +1480,6 @@ i32.const 0 i32.const 1056 i32.const 106 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1534,7 +1492,6 @@ i32.const 0 i32.const 1056 i32.const 107 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1547,7 +1504,6 @@ i32.const 0 i32.const 1056 i32.const 108 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1560,7 +1516,6 @@ i32.const 0 i32.const 1056 i32.const 109 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1573,7 +1528,6 @@ i32.const 0 i32.const 1056 i32.const 110 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1586,7 +1540,6 @@ i32.const 0 i32.const 1056 i32.const 111 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1599,7 +1552,6 @@ i32.const 0 i32.const 1056 i32.const 112 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1612,7 +1564,6 @@ i32.const 0 i32.const 1056 i32.const 113 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1625,7 +1576,6 @@ i32.const 0 i32.const 1056 i32.const 114 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1638,7 +1588,6 @@ i32.const 0 i32.const 1056 i32.const 115 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1651,7 +1600,6 @@ i32.const 0 i32.const 1056 i32.const 116 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1664,7 +1612,6 @@ i32.const 0 i32.const 1056 i32.const 117 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1677,7 +1624,6 @@ i32.const 0 i32.const 1056 i32.const 118 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1690,7 +1636,6 @@ i32.const 0 i32.const 1056 i32.const 119 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1703,7 +1648,6 @@ i32.const 0 i32.const 1056 i32.const 120 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1716,7 +1660,6 @@ i32.const 0 i32.const 1056 i32.const 121 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1729,7 +1672,6 @@ i32.const 0 i32.const 1056 i32.const 122 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1742,7 +1684,6 @@ i32.const 0 i32.const 1056 i32.const 125 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1755,7 +1696,6 @@ i32.const 0 i32.const 1056 i32.const 126 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1768,7 +1708,6 @@ i32.const 0 i32.const 1056 i32.const 127 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1781,7 +1720,6 @@ i32.const 0 i32.const 1056 i32.const 128 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1794,7 +1732,6 @@ i32.const 0 i32.const 1056 i32.const 129 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1807,7 +1744,6 @@ i32.const 0 i32.const 1056 i32.const 130 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1820,7 +1756,6 @@ i32.const 0 i32.const 1056 i32.const 131 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1833,7 +1768,6 @@ i32.const 0 i32.const 1056 i32.const 132 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1846,7 +1780,6 @@ i32.const 0 i32.const 1056 i32.const 133 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1859,7 +1792,6 @@ i32.const 0 i32.const 1056 i32.const 134 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1872,7 +1804,6 @@ i32.const 0 i32.const 1056 i32.const 135 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1885,7 +1816,6 @@ i32.const 0 i32.const 1056 i32.const 136 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1898,7 +1828,6 @@ i32.const 0 i32.const 1056 i32.const 137 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1911,7 +1840,6 @@ i32.const 0 i32.const 1056 i32.const 138 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1924,7 +1852,6 @@ i32.const 0 i32.const 1056 i32.const 139 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1937,7 +1864,6 @@ i32.const 0 i32.const 1056 i32.const 140 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1950,7 +1876,6 @@ i32.const 0 i32.const 1056 i32.const 141 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1963,7 +1888,6 @@ i32.const 0 i32.const 1056 i32.const 142 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1976,7 +1900,6 @@ i32.const 0 i32.const 1056 i32.const 143 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -1989,7 +1912,6 @@ i32.const 0 i32.const 1056 i32.const 144 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2002,7 +1924,6 @@ i32.const 0 i32.const 1056 i32.const 145 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2015,7 +1936,6 @@ i32.const 0 i32.const 1056 i32.const 146 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2028,7 +1948,6 @@ i32.const 0 i32.const 1056 i32.const 147 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2041,7 +1960,6 @@ i32.const 0 i32.const 1056 i32.const 148 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2054,7 +1972,6 @@ i32.const 0 i32.const 1056 i32.const 149 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2067,7 +1984,6 @@ i32.const 0 i32.const 1056 i32.const 150 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2080,7 +1996,6 @@ i32.const 0 i32.const 1056 i32.const 151 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2093,7 +2008,6 @@ i32.const 0 i32.const 1056 i32.const 152 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2106,7 +2020,6 @@ i32.const 0 i32.const 1056 i32.const 153 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2119,7 +2032,6 @@ i32.const 0 i32.const 1056 i32.const 154 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2132,7 +2044,6 @@ i32.const 0 i32.const 1056 i32.const 155 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2145,7 +2056,6 @@ i32.const 0 i32.const 1056 i32.const 156 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2158,7 +2068,6 @@ i32.const 0 i32.const 1056 i32.const 157 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2171,7 +2080,6 @@ i32.const 0 i32.const 1056 i32.const 158 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2184,7 +2092,6 @@ i32.const 0 i32.const 1056 i32.const 159 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2197,7 +2104,6 @@ i32.const 0 i32.const 1056 i32.const 160 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2210,7 +2116,6 @@ i32.const 0 i32.const 1056 i32.const 161 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2223,7 +2128,6 @@ i32.const 0 i32.const 1056 i32.const 162 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2236,7 +2140,6 @@ i32.const 0 i32.const 1056 i32.const 163 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2249,7 +2152,6 @@ i32.const 0 i32.const 1056 i32.const 164 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -2262,7 +2164,6 @@ i32.const 0 i32.const 1056 i32.const 165 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/std/new.debug.wat b/tests/compiler/std/new.debug.wat index 5979cb6867..65926fe9d9 100644 --- a/tests/compiler/std/new.debug.wat +++ b/tests/compiler/std/new.debug.wat @@ -4,14 +4,15 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 f32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 f32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 f32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/new/AClass.aStaticField (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -23,6 +24,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -242,7 +244,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2285,62 +2287,6 @@ call $std/new/AClass#constructor global.set $std/new/aClass ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/new/aClass - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $std/new/AClass - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/new/AClass $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:std/new ) @@ -2357,6 +2303,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $std/new/AClass#constructor (param $this i32) (param $value f32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -2428,4 +2406,60 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/new/aClass + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $std/new/AClass + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/new/AClass $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/std/new.release.wat b/tests/compiler/std/new.release.wat index 98131dbec6..59066b9475 100644 --- a/tests/compiler/std/new.release.wat +++ b/tests/compiler/std/new.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (result i32))) (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -33,6 +33,41 @@ (data $8 (i32.const 1440) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1464 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -71,7 +106,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$113 + block $__inlined_func$~lib/rt/itcms/Object#unlink$114 local.get $1 i32.load offset=4 i32.const -4 @@ -95,7 +130,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$113 + br $__inlined_func$~lib/rt/itcms/Object#unlink$114 end local.get $1 i32.load offset=8 @@ -138,7 +173,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/object.debug.wat b/tests/compiler/std/object.debug.wat index b2cfc90f1a..641c2c790d 100644 --- a/tests/compiler/std/object.debug.wat +++ b/tests/compiler/std/object.debug.wat @@ -2,16 +2,18 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32) (result i32))) (type $2 (func (param i32 i32))) - (type $3 (func)) - (type $4 (func (param f64 f64) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func)) + (type $5 (func (param f64 f64) (result i32))) (type $6 (func (param f32 f32) (result i32))) (type $7 (func (param i32 i32 i32 i32 i32) (result i32))) (type $8 (func (param i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0)) (global $~lib/rt/stub/offset (mut i32) (i32.const 0)) @@ -50,6 +52,15 @@ i32.or return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + i32.const 0 + drop + local.get $message + local.get $fileName + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + ) (func $~lib/object/Object.is (param $x f32) (param $y f32) (result i32) i32.const 1 drop diff --git a/tests/compiler/std/object.release.wat b/tests/compiler/std/object.release.wat index 203637c32f..edbc593a3a 100644 --- a/tests/compiler/std/object.release.wat +++ b/tests/compiler/std/object.release.wat @@ -2,7 +2,7 @@ (type $0 (func (param i32 i32 i32 i32))) (type $1 (func (param i32 i32) (result i32))) (type $2 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\1a\00\00\00s\00t\00d\00/\00o\00b\00j\00e\00c\00t\00.\00t\00s") @@ -154,7 +154,7 @@ i32.const 1056 i32.const 44 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 1104 @@ -165,7 +165,7 @@ i32.const 1056 i32.const 45 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 1104 @@ -176,7 +176,7 @@ i32.const 1056 i32.const 46 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 0 @@ -189,7 +189,7 @@ i32.const 1056 i32.const 48 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 1200 @@ -200,7 +200,7 @@ i32.const 1056 i32.const 49 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 0 @@ -211,7 +211,7 @@ i32.const 1056 i32.const 50 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end memory.size @@ -329,7 +329,7 @@ i32.const 1056 i32.const 74 i32.const 3 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 1352 @@ -341,7 +341,7 @@ i32.const 1056 i32.const 76 i32.const 3 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end i32.const 1384 @@ -353,7 +353,7 @@ i32.const 1056 i32.const 77 i32.const 3 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl unreachable end ) diff --git a/tests/compiler/std/operator-overloading.debug.wat b/tests/compiler/std/operator-overloading.debug.wat index 3313be1958..6c11bb503e 100644 --- a/tests/compiler/std/operator-overloading.debug.wat +++ b/tests/compiler/std/operator-overloading.debug.wat @@ -10,7 +10,8 @@ (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,6 +23,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -298,7 +300,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2725,545 +2727,705 @@ local.get $this i32.load offset=4 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/operator-overloading/a1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/a2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/a - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/s1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/s2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/s - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/m1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/m2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/m - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/d1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/d2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/d - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/f1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/f2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/f - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/p1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/p2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/p - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/n1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/n2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/n - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/o1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/o2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/o - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/x1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/x2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/x - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/eq1 - local.tee $1 + (func $~start + call $start:std/operator-overloading + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 33392 + i32.const 33440 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable end - global.get $std/operator-overloading/eq2 - local.tee $1 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/operator-overloading/Tester#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store end - global.get $std/operator-overloading/eq3 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/eq4 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/gt1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/gt2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/gte1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/gte2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/le1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/le2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/leq1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/leq2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/shr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/sres - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/shu - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/ures - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/shl - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/pos - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/pres - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/neg - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/nres - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/not - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/res - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/excl - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/incdec - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/tmp - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/ais1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/ais2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/ais - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/aii1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/aii2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/aii - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/operator-overloading/tea - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $x + call $std/operator-overloading/Tester#set:x + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $y + call $std/operator-overloading/Tester#set:y + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $std/operator-overloading/Tester.add (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.add + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.add + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.sub (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.sub + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.sub + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.mul (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.mul + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.mul + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.div (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.div_s + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.div_s + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.mod (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.rem_s + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.rem_s + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.pow (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + call $~lib/math/ipow32 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + call $~lib/math/ipow32 + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.and (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.and + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.and + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (func $std/operator-overloading/Tester.or (param $a i32) (param $b i32) (result i32) (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.or + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.or + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + (func $std/operator-overloading/Tester.xor (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.xor + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.xor + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $std/operator-overloading/TesterElementAccess - block $std/operator-overloading/TesterInlineInstance - block $std/operator-overloading/TesterInlineStatic - block $std/operator-overloading/Tester - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/operator-overloading/Tester $std/operator-overloading/TesterInlineStatic $std/operator-overloading/TesterInlineInstance $std/operator-overloading/TesterElementAccess $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - return - end - return + (func $std/operator-overloading/Tester.equals (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.eq + if (result i32) + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.eq + else + i32.const 0 + end + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.notEquals (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.ne + if (result i32) + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.ne + else + i32.const 0 end - unreachable - ) - (func $~start - call $start:std/operator-overloading - ) - (func $~stack_check + local.set $2 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33392 - i32.const 33440 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return ) - (func $std/operator-overloading/Tester#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) - (local $3 i32) + (func $std/operator-overloading/Tester.greater (param $a i32) (param $b i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if + i32.const 0 + i32.store + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + i32.gt_s + if (result i32) + local.get $a + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.gt_s + else + i32.const 0 end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $x - call $std/operator-overloading/Tester#set:x - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $y - call $std/operator-overloading/Tester#set:y - local.get $this - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $2 + return ) - (func $std/operator-overloading/Tester.add (param $a i32) (param $b i32) (result i32) + (func $std/operator-overloading/Tester.greaterEquals (param $a i32) (param $b i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3273,7 +3435,6 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 local.get $a local.set $2 global.get $~lib/memory/__stack_pointer @@ -3288,23 +3449,78 @@ i32.store local.get $2 call $std/operator-overloading/Tester#get:x + i32.ge_s + if (result i32) + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.ge_s + else + i32.const 0 + end + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.less (param $a i32) (param $b i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $a local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $std/operator-overloading/Tester#get:y + call $std/operator-overloading/Tester#get:x local.get $b local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $std/operator-overloading/Tester#get:y - i32.add - call $std/operator-overloading/Tester#constructor + call $std/operator-overloading/Tester#get:x + i32.lt_s + if (result i32) + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.lt_s + else + i32.const 0 + end local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3313,7 +3529,7 @@ local.get $2 return ) - (func $std/operator-overloading/Tester.sub (param $a i32) (param $b i32) (result i32) + (func $std/operator-overloading/Tester.lessEquals (param $a i32) (param $b i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3323,7 +3539,6 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 local.get $a local.set $2 global.get $~lib/memory/__stack_pointer @@ -3338,22 +3553,101 @@ i32.store local.get $2 call $std/operator-overloading/Tester#get:x + i32.le_s + if (result i32) + local.get $a + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + local.get $b + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:y + i32.le_s + else + i32.const 0 + end + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.shr (param $value i32) (param $shift i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.sub - local.get $a + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $value + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $shift + i32.shr_s + local.get $value local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 call $std/operator-overloading/Tester#get:y - local.get $b + local.get $shift + i32.shr_s + call $std/operator-overloading/Tester#constructor + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/operator-overloading/Tester.shu (param $value i32) (param $shift i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 0 + local.get $value + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $std/operator-overloading/Tester#get:x + local.get $shift + i32.shr_u + local.get $value local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 call $std/operator-overloading/Tester#get:y - i32.sub + local.get $shift + i32.shr_u call $std/operator-overloading/Tester#constructor local.set $2 global.get $~lib/memory/__stack_pointer @@ -3363,7 +3657,7 @@ local.get $2 return ) - (func $std/operator-overloading/Tester.mul (param $a i32) (param $b i32) (result i32) + (func $std/operator-overloading/Tester.shl (param $value i32) (param $shift i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3374,36 +3668,24 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b + local.get $value local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 call $std/operator-overloading/Tester#get:x - i32.mul - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b + local.get $shift + i32.shl + local.get $value local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 call $std/operator-overloading/Tester#get:y - i32.mul + local.get $shift + i32.shl call $std/operator-overloading/Tester#constructor local.set $2 global.get $~lib/memory/__stack_pointer @@ -3413,8 +3695,8 @@ local.get $2 return ) - (func $std/operator-overloading/Tester.div (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester.pos (param $value i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3424,47 +3706,31 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - i32.div_s - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:y - i32.div_s call $std/operator-overloading/Tester#constructor - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.mod (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester.neg (param $value i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3474,47 +3740,35 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + i32.const 0 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - i32.rem_s - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i32.sub + i32.const 0 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:y - i32.rem_s + i32.sub call $std/operator-overloading/Tester#constructor - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.pow (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester.not (param $value i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3524,47 +3778,35 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - call $~lib/math/ipow32 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i32.const -1 + i32.xor + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:y - call $~lib/math/ipow32 + i32.const -1 + i32.xor call $std/operator-overloading/Tester#constructor - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.and (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester.excl (param $value i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3573,48 +3815,138 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 - local.get $a - local.set $2 + local.get $value + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + i32.eqz + if (result i32) + local.get $value + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $std/operator-overloading/Tester#get:y + i32.eqz + else + i32.const 0 + end + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $std/operator-overloading/Tester#inc (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $std/operator-overloading/Tester#get:x + i32.const 1 + i32.add + call $std/operator-overloading/Tester#set:x + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $std/operator-overloading/Tester#get:y + i32.const 1 + i32.add + call $std/operator-overloading/Tester#set:y + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $std/operator-overloading/Tester#dec (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 call $std/operator-overloading/Tester#get:x - i32.and - local.get $a - local.set $2 + i32.const 1 + i32.sub + call $std/operator-overloading/Tester#set:x + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + local.get $1 + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 + local.get $1 + i32.store offset=4 + local.get $1 call $std/operator-overloading/Tester#get:y - i32.and - call $std/operator-overloading/Tester#constructor - local.set $2 + i32.const 1 + i32.sub + call $std/operator-overloading/Tester#set:y + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.or (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester#postInc (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3624,47 +3956,35 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - i32.or - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i32.const 1 + i32.add + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:y - i32.or + i32.const 1 + i32.add call $std/operator-overloading/Tester#constructor - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.xor (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/Tester#postDec (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3674,255 +3994,263 @@ i32.const 0 i32.store i32.const 0 - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:x - i32.xor - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i32.const 1 + i32.sub + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.store - local.get $2 + local.get $1 call $std/operator-overloading/Tester#get:y - i32.xor + i32.const 1 + i32.sub call $std/operator-overloading/Tester#constructor - local.set $2 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $1 return ) - (func $std/operator-overloading/Tester.equals (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/TesterInlineStatic#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - i32.eq - if (result i32) - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i64.const 0 + i64.store + local.get $this + i32.eqz + if global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 8 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - i32.eq - else - i32.const 0 end - local.set $2 + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=4 + local.get $3 + local.get $x + call $std/operator-overloading/TesterInlineStatic#set:x + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $y + call $std/operator-overloading/TesterInlineStatic#set:y + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 - return + local.get $3 ) - (func $std/operator-overloading/Tester.notEquals (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/TesterInlineInstance#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - i32.ne - if (result i32) - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i64.const 0 + i64.store + local.get $this + i32.eqz + if global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 8 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - i32.ne - else - i32.const 0 end - local.set $2 + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=4 + local.get $3 + local.get $x + call $std/operator-overloading/TesterInlineInstance#set:x + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $y + call $std/operator-overloading/TesterInlineInstance#set:y + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 - return + local.get $3 ) - (func $std/operator-overloading/Tester.greater (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/TesterElementAccess#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - i32.gt_s - if (result i32) - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + i64.const 0 + i64.store + local.get $this + i32.eqz + if global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 8 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - i32.gt_s - else - i32.const 0 end - local.set $2 + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=4 + local.get $3 + local.get $x + call $std/operator-overloading/TesterElementAccess#set:x + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + local.get $y + call $std/operator-overloading/TesterElementAccess#set:y + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 - return + local.get $3 ) - (func $std/operator-overloading/Tester.greaterEquals (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left i32.const 0 - i32.store - local.get $a - local.set $2 + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - i32.ge_s - if (result i32) - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - i32.ge_s - else + local.get $3 + call $~lib/string/String#get:length + i32.ne + if i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return end - local.set $2 + local.get $left + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store + local.get $3 + i32.const 0 + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $3 return ) - (func $std/operator-overloading/Tester.less (param $a i32) (param $b i32) (result i32) - (local $2 i32) + (func $std/operator-overloading/TesterElementAccess#__set (param $this i32) (param $key i32) (param $value i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3931,49 +4259,39 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b - local.set $2 + local.get $key + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - i32.lt_s - if (result i32) - local.get $a - local.set $2 + local.get $3 + i32.const 512 + call $~lib/string/String.__eq + if + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b - local.set $2 + local.get $3 + local.get $value + call $std/operator-overloading/TesterElementAccess#set:x + else + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - i32.lt_s - else - i32.const 0 + local.get $3 + local.get $value + call $std/operator-overloading/TesterElementAccess#set:y end - local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 - return ) - (func $std/operator-overloading/Tester.lessEquals (param $a i32) (param $b i32) (result i32) + (func $std/operator-overloading/TesterElementAccess#__get (param $this i32) (param $key i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -3983,39 +4301,30 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $a - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $b + local.get $key local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $std/operator-overloading/Tester#get:x - i32.le_s + i32.const 512 + call $~lib/string/String.__eq if (result i32) - local.get $a + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $b + call $std/operator-overloading/TesterElementAccess#get:x + else + local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $std/operator-overloading/Tester#get:y - i32.le_s - else - i32.const 0 + call $std/operator-overloading/TesterElementAccess#get:y end local.set $2 global.get $~lib/memory/__stack_pointer @@ -4025,838 +4334,984 @@ local.get $2 return ) - (func $std/operator-overloading/Tester.shr (param $value i32) (param $shift i32) (result i32) + (func $start:std/operator-overloading + (local $0 i32) + (local $1 i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 40 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store - i32.const 0 - local.get $value - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $shift - i32.shr_s - local.get $value - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $shift - i32.shr_s - call $std/operator-overloading/Tester#constructor - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $std/operator-overloading/Tester.shu (param $value i32) (param $shift i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 40 + memory.fill + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 144 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 176 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace i32.const 0 - i32.store + i32.const 1 + i32.const 2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/a1 i32.const 0 - local.get $value - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $shift - i32.shr_u - local.get $value - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $shift - i32.shr_u + i32.const 2 + i32.const 3 call $std/operator-overloading/Tester#constructor - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $std/operator-overloading/Tester.shl (param $value i32) (param $shift i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + global.set $std/operator-overloading/a2 + global.get $std/operator-overloading/a1 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $9 i32.store - i32.const 0 - local.get $value - local.set $2 + local.get $9 + global.get $std/operator-overloading/a2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/Tester#get:x - local.get $shift - i32.shl - local.get $value - local.set $2 + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.add + global.set $std/operator-overloading/a + global.get $std/operator-overloading/a + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $9 i32.store - local.get $2 - call $std/operator-overloading/Tester#get:y - local.get $shift - i32.shl + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 3 + i32.eq + if (result i32) + global.get $std/operator-overloading/a + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 5 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 145 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 2 + i32.const 3 call $std/operator-overloading/Tester#constructor - local.set $2 + global.set $std/operator-overloading/s1 + i32.const 0 + i32.const 2 + i32.const -3 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/s2 + global.get $std/operator-overloading/s1 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $std/operator-overloading/Tester.pos (param $value i32) (result i32) - (local $1 i32) + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/s2 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.sub + global.set $std/operator-overloading/s + global.get $std/operator-overloading/s + local.set $9 global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 0 + i32.eq + if (result i32) + global.get $std/operator-overloading/s + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 6 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 151 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 0 - i32.store + i32.const 2 + i32.const 5 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/m1 i32.const 0 - local.get $value - local.set $1 + i32.const 3 + i32.const 2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/m2 + global.get $std/operator-overloading/m1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - call $std/operator-overloading/Tester#get:x - local.get $value - local.set $1 + local.get $9 + global.get $std/operator-overloading/m2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.mul + global.set $std/operator-overloading/m + global.get $std/operator-overloading/m + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store - local.get $1 - call $std/operator-overloading/Tester#get:y + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 6 + i32.eq + if (result i32) + global.get $std/operator-overloading/m + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 10 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 157 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 6 + i32.const 50 call $std/operator-overloading/Tester#constructor - local.set $1 + global.set $std/operator-overloading/d1 + i32.const 0 + i32.const 3 + i32.const 10 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/d2 + global.get $std/operator-overloading/d1 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester.neg (param $value i32) (result i32) - (local $1 i32) + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/d2 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.div + global.set $std/operator-overloading/d + global.get $std/operator-overloading/d + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $9 i32.store + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 2 + i32.eq + if (result i32) + global.get $std/operator-overloading/d + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 5 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 163 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 0 + i32.const 10 + i32.const 10 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/f1 i32.const 0 - local.get $value - local.set $1 + i32.const 6 + i32.const 10 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/f2 + global.get $std/operator-overloading/f1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - call $std/operator-overloading/Tester#get:x - i32.sub - i32.const 0 - local.get $value - local.set $1 + local.get $9 + global.get $std/operator-overloading/f2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.mod + global.set $std/operator-overloading/f + global.get $std/operator-overloading/f + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store - local.get $1 - call $std/operator-overloading/Tester#get:y - i32.sub + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 4 + i32.eq + if (result i32) + global.get $std/operator-overloading/f + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 0 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 169 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 2 + i32.const 3 call $std/operator-overloading/Tester#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer + global.set $std/operator-overloading/p1 + i32.const 0 i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester.not (param $value i32) (result i32) - (local $1 i32) + i32.const 5 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/p2 + global.get $std/operator-overloading/p1 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/p2 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.pow + global.set $std/operator-overloading/p + global.get $std/operator-overloading/p + local.set $9 global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 16 + i32.eq + if (result i32) + global.get $std/operator-overloading/p + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 243 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 175 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 0 - i32.store + i32.const 255 + i32.const 15 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/n1 i32.const 0 - local.get $value - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:x - i32.const -1 - i32.xor - local.get $value - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:y - i32.const -1 - i32.xor + i32.const 15 + i32.const 255 call $std/operator-overloading/Tester#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester.excl (param $value i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + global.set $std/operator-overloading/n2 + global.get $std/operator-overloading/n1 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $9 i32.store - local.get $value - local.set $1 + local.get $9 + global.get $std/operator-overloading/n2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.and + global.set $std/operator-overloading/n + global.get $std/operator-overloading/n + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store - local.get $1 + local.get $9 call $std/operator-overloading/Tester#get:x - i32.eqz + i32.const 15 + i32.eq if (result i32) - local.get $value - local.set $1 + global.get $std/operator-overloading/n + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 + local.get $9 call $std/operator-overloading/Tester#get:y - i32.eqz + i32.const 15 + i32.eq else i32.const 0 end - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester#inc (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $1 + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 181 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 3855 + i32.const 255 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/o1 + i32.const 0 + i32.const 61680 + i32.const 0 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/o2 + global.get $std/operator-overloading/o1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - local.get $this - local.set $1 + local.get $9 + global.get $std/operator-overloading/o2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store offset=4 - local.get $1 + local.get $9 + call $std/operator-overloading/Tester.or + global.set $std/operator-overloading/o + global.get $std/operator-overloading/o + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.add - call $std/operator-overloading/Tester#set:x - local.get $this - local.set $1 + i32.const 65535 + i32.eq + if (result i32) + global.get $std/operator-overloading/o + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 255 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 187 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 255 + i32.const 255 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/x1 + i32.const 0 + i32.const 65280 + i32.const 0 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/x2 + global.get $std/operator-overloading/x1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - local.get $this - local.set $1 + local.get $9 + global.get $std/operator-overloading/x2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store offset=4 - local.get $1 - call $std/operator-overloading/Tester#get:y - i32.const 1 - i32.add - call $std/operator-overloading/Tester#set:y - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester#dec (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $1 + local.get $9 + call $std/operator-overloading/Tester.xor + global.set $std/operator-overloading/x + global.get $std/operator-overloading/x + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 + local.get $9 call $std/operator-overloading/Tester#get:x + i32.const 65535 + i32.eq + if (result i32) + global.get $std/operator-overloading/x + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 255 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 193 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 1 + i32.const -2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/eq1 + i32.const 0 i32.const 1 - i32.sub - call $std/operator-overloading/Tester#set:x - local.get $this - local.set $1 + i32.const -2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/eq2 + global.get $std/operator-overloading/eq1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store - local.get $1 - local.get $this - local.set $1 + local.get $9 + global.get $std/operator-overloading/eq2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $9 i32.store offset=4 - local.get $1 - call $std/operator-overloading/Tester#get:y + local.get $9 + call $std/operator-overloading/Tester.equals + global.set $std/operator-overloading/eq + global.get $std/operator-overloading/eq i32.const 1 - i32.sub - call $std/operator-overloading/Tester#set:y - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester#postInc (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 199 + i32.const 1 + call $~lib/builtins/abort + unreachable + end i32.const 0 - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.add - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:y i32.const 1 - i32.add + i32.const 0 call $std/operator-overloading/Tester#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/Tester#postDec (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + global.set $std/operator-overloading/eq3 i32.const 0 - i32.store i32.const 0 - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.sub - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $std/operator-overloading/Tester#get:y i32.const 1 - i32.sub call $std/operator-overloading/Tester#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $std/operator-overloading/TesterInlineStatic#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) - (local $3 i32) + global.set $std/operator-overloading/eq4 + global.get $std/operator-overloading/eq3 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/eq4 + local.set $9 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.equals + global.set $std/operator-overloading/eqf + global.get $std/operator-overloading/eqf + i32.const 0 + i32.eq i32.eqz if - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.const 5 - call $~lib/rt/itcms/__new - local.tee $this - i32.store + i32.const 0 + i32.const 432 + i32.const 205 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.get $this - local.set $3 + global.get $std/operator-overloading/eq1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $x - call $std/operator-overloading/TesterInlineStatic#set:x - local.get $this - local.set $3 + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/eq2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store offset=4 - local.get $3 - local.get $y - call $std/operator-overloading/TesterInlineStatic#set:y - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - ) - (func $std/operator-overloading/TesterInlineInstance#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this + local.get $9 + call $std/operator-overloading/Tester.notEquals + global.set $std/operator-overloading/eq + global.get $std/operator-overloading/eq + i32.const 0 + i32.eq i32.eqz if - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $this - i32.store + i32.const 0 + i32.const 432 + i32.const 209 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.get $this - local.set $3 + global.get $std/operator-overloading/eq3 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $x - call $std/operator-overloading/TesterInlineInstance#set:x - local.get $this - local.set $3 + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/eq4 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store offset=4 - local.get $3 - local.get $y - call $std/operator-overloading/TesterInlineInstance#set:y - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - ) - (func $std/operator-overloading/TesterElementAccess#constructor (param $this i32) (param $x i32) (param $y i32) (result i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this + local.get $9 + call $std/operator-overloading/Tester.notEquals + global.set $std/operator-overloading/eqf + global.get $std/operator-overloading/eqf + i32.const 1 + i32.eq i32.eqz if - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $this - i32.store + i32.const 0 + i32.const 432 + i32.const 213 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.get $this - local.set $3 + i32.const 0 + i32.const 2 + global.get $~lib/builtins/i32.MAX_VALUE + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/gt1 + i32.const 0 + i32.const 1 + i32.const 0 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/gt2 + global.get $std/operator-overloading/gt1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - local.get $x - call $std/operator-overloading/TesterElementAccess#set:x - local.get $this - local.set $3 + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/gt2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store offset=4 - local.get $3 - local.get $y - call $std/operator-overloading/TesterElementAccess#set:y - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - ) - (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) - (local $leftLength i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $left - local.get $right + local.get $9 + call $std/operator-overloading/Tester.greater + global.set $std/operator-overloading/gt + global.get $std/operator-overloading/gt + i32.const 1 i32.eq + i32.eqz if + i32.const 0 + i32.const 432 + i32.const 219 i32.const 1 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return + call $~lib/builtins/abort + unreachable end - local.get $left i32.const 0 + i32.const 2 + i32.const 2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/gte1 + i32.const 0 + i32.const 2 + i32.const 2 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/gte2 + global.get $std/operator-overloading/gte1 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + global.get $std/operator-overloading/gte2 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.greaterEquals + global.set $std/operator-overloading/gte + global.get $std/operator-overloading/gte + i32.const 1 i32.eq - if (result i32) - i32.const 1 - else - local.get $right - i32.const 0 - i32.eq - end + i32.eqz if i32.const 0 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return + i32.const 432 + i32.const 225 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.get $left - local.set $3 + i32.const 0 + i32.const 5 + i32.const -1 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/le1 + i32.const 0 + i32.const 6 + i32.const 6 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/le2 + global.get $std/operator-overloading/le1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store - local.get $3 - call $~lib/string/String#get:length - local.set $leftLength - local.get $leftLength - local.get $right - local.set $3 + local.get $9 + global.get $std/operator-overloading/le2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/string/String#get:length - i32.ne + local.get $9 + i32.store offset=4 + local.get $9 + call $std/operator-overloading/Tester.less + global.set $std/operator-overloading/le + global.get $std/operator-overloading/le + i32.const 1 + i32.eq + i32.eqz if i32.const 0 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return + i32.const 432 + i32.const 231 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.get $left - local.set $3 + i32.const 0 + i32.const 4 + i32.const 3 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/leq1 + i32.const 0 + i32.const 4 + i32.const 3 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/leq2 + global.get $std/operator-overloading/leq1 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store - local.get $3 - i32.const 0 - local.get $right - local.set $3 + local.get $9 + global.get $std/operator-overloading/leq2 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store offset=4 - local.get $3 - i32.const 0 - local.get $leftLength - call $~lib/util/string/compareImpl + local.get $9 + call $std/operator-overloading/Tester.lessEquals + global.set $std/operator-overloading/leq + global.get $std/operator-overloading/leq + i32.const 1 + i32.eq i32.eqz - local.set $3 - global.get $~lib/memory/__stack_pointer + if + i32.const 0 + i32.const 432 + i32.const 237 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $std/operator-overloading/TesterElementAccess#__set (param $this i32) (param $key i32) (param $value i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + i32.const 16 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/shr + global.get $std/operator-overloading/shr + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $9 i32.store - local.get $key - local.set $3 + local.get $9 + i32.const 3 + call $std/operator-overloading/Tester.shr + global.set $std/operator-overloading/sres + global.get $std/operator-overloading/sres + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store - local.get $3 - i32.const 512 - call $~lib/string/String.__eq - if - local.get $this - local.set $3 + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 1 + i32.eq + if (result i32) + global.get $std/operator-overloading/sres + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $9 i32.store - local.get $3 - local.get $value - call $std/operator-overloading/TesterElementAccess#set:x + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 2 + i32.eq else - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - local.get $value - call $std/operator-overloading/TesterElementAccess#set:y + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 242 + i32.const 1 + call $~lib/builtins/abort + unreachable end - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $std/operator-overloading/TesterElementAccess#__get (param $this i32) (param $key i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer i32.const 0 + i32.const -8 + i32.const -16 + call $std/operator-overloading/Tester#constructor + global.set $std/operator-overloading/shu + global.get $std/operator-overloading/shu + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store - local.get $key - local.set $2 + local.get $9 + i32.const 3 + call $std/operator-overloading/Tester.shu + global.set $std/operator-overloading/ures + global.get $std/operator-overloading/ures + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $9 i32.store - local.get $2 - i32.const 512 - call $~lib/string/String.__eq + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 536870911 + i32.eq if (result i32) - local.get $this - local.set $2 + global.get $std/operator-overloading/ures + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $9 i32.store - local.get $2 - call $std/operator-overloading/TesterElementAccess#get:x + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 536870910 + i32.eq else - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $std/operator-overloading/TesterElementAccess#get:y + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 247 + i32.const 1 + call $~lib/builtins/abort + unreachable end - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $start:std/operator-overloading - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - global.get $~lib/memory/__stack_pointer - i32.const 40 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 40 - memory.fill - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base - i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 144 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 176 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 320 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace i32.const 0 i32.const 1 i32.const 2 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/a1 - i32.const 0 - i32.const 2 + global.set $std/operator-overloading/shl + global.get $std/operator-overloading/shl + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 i32.const 3 + call $std/operator-overloading/Tester.shl + global.set $std/operator-overloading/sres + global.get $std/operator-overloading/sres + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:x + i32.const 8 + i32.eq + if (result i32) + global.get $std/operator-overloading/sres + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 16 + i32.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 252 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i32.const 1 + i32.const -2 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/a2 - global.get $std/operator-overloading/a1 + global.set $std/operator-overloading/pos + global.get $std/operator-overloading/pos local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/a2 + call $std/operator-overloading/Tester.pos + global.set $std/operator-overloading/pres + global.get $std/operator-overloading/pres local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.add - global.set $std/operator-overloading/a - global.get $std/operator-overloading/a + call $std/operator-overloading/Tester#get:x + global.get $std/operator-overloading/pos local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 3 i32.eq if (result i32) - global.get $std/operator-overloading/a + global.get $std/operator-overloading/pres + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + global.get $std/operator-overloading/pos local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 5 i32.eq else i32.const 0 @@ -4865,53 +5320,58 @@ if i32.const 0 i32.const 432 - i32.const 145 + i32.const 257 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - i32.const 2 - i32.const 3 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/s1 - i32.const 0 - i32.const 2 - i32.const -3 + i32.const -1 + i32.const -2 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/s2 - global.get $std/operator-overloading/s1 + global.set $std/operator-overloading/neg + global.get $std/operator-overloading/neg local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/s2 + call $std/operator-overloading/Tester.neg + global.set $std/operator-overloading/nres + global.get $std/operator-overloading/nres local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.sub - global.set $std/operator-overloading/s - global.get $std/operator-overloading/s + call $std/operator-overloading/Tester#get:x + i32.const 0 + global.get $std/operator-overloading/neg local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 0 + i32.sub i32.eq if (result i32) - global.get $std/operator-overloading/s + global.get $std/operator-overloading/nres local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 6 + i32.const 0 + global.get $std/operator-overloading/neg + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.sub i32.eq else i32.const 0 @@ -4920,53 +5380,58 @@ if i32.const 0 i32.const 432 - i32.const 151 + i32.const 262 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - i32.const 2 - i32.const 5 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/m1 - i32.const 0 - i32.const 3 - i32.const 2 + i32.const 255 + i32.const 16 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/m2 - global.get $std/operator-overloading/m1 + global.set $std/operator-overloading/not + global.get $std/operator-overloading/not local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/m2 + call $std/operator-overloading/Tester.not + global.set $std/operator-overloading/res + global.get $std/operator-overloading/res local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.mul - global.set $std/operator-overloading/m - global.get $std/operator-overloading/m + call $std/operator-overloading/Tester#get:x + global.get $std/operator-overloading/not local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 6 + i32.const -1 + i32.xor i32.eq if (result i32) - global.get $std/operator-overloading/m + global.get $std/operator-overloading/res local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 10 + global.get $std/operator-overloading/not + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const -1 + i32.xor i32.eq else i32.const 0 @@ -4975,108 +5440,98 @@ if i32.const 0 i32.const 432 - i32.const 157 + i32.const 267 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - i32.const 6 - i32.const 50 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/d1 i32.const 0 - i32.const 3 - i32.const 10 + i32.const 0 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/d2 - global.get $std/operator-overloading/d1 + global.set $std/operator-overloading/excl + global.get $std/operator-overloading/excl local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/d2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.div - global.set $std/operator-overloading/d - global.get $std/operator-overloading/d + call $std/operator-overloading/Tester.excl + global.set $std/operator-overloading/bres + global.get $std/operator-overloading/bres + global.get $std/operator-overloading/excl local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 2 - i32.eq + i32.eqz if (result i32) - global.get $std/operator-overloading/d + global.get $std/operator-overloading/excl local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 5 - i32.eq + i32.eqz else i32.const 0 end + i32.eq i32.eqz if i32.const 0 i32.const 432 - i32.const 163 + i32.const 272 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/operator-overloading/bres + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 273 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - i32.const 10 - i32.const 10 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/f1 i32.const 0 - i32.const 6 - i32.const 10 + i32.const 1 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/f2 - global.get $std/operator-overloading/f1 + global.set $std/operator-overloading/incdec + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/f2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.mod - global.set $std/operator-overloading/f - global.get $std/operator-overloading/f + call $std/operator-overloading/Tester#inc + global.set $std/operator-overloading/incdec + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 4 + i32.const 1 i32.eq if (result i32) - global.get $std/operator-overloading/f + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 0 + i32.const 2 i32.eq else i32.const 0 @@ -5085,53 +5540,37 @@ if i32.const 0 i32.const 432 - i32.const 169 + i32.const 279 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 2 - i32.const 3 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/p1 - i32.const 0 - i32.const 4 - i32.const 5 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/p2 - global.get $std/operator-overloading/p1 + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/p2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.pow - global.set $std/operator-overloading/p - global.get $std/operator-overloading/p + call $std/operator-overloading/Tester#dec + global.set $std/operator-overloading/incdec + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 16 + i32.const 0 i32.eq if (result i32) - global.get $std/operator-overloading/p + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 243 + i32.const 1 i32.eq else i32.const 0 @@ -5140,53 +5579,48 @@ if i32.const 0 i32.const 432 - i32.const 175 + i32.const 282 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 - i32.const 255 - i32.const 15 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/n1 i32.const 0 - i32.const 15 - i32.const 255 + i32.const 1 call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/n2 - global.get $std/operator-overloading/n1 - local.set $9 + global.set $std/operator-overloading/incdec global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - global.get $std/operator-overloading/n2 + global.get $std/operator-overloading/incdec + local.tee $0 + i32.store offset=8 + local.get $0 local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.and - global.set $std/operator-overloading/n - global.get $std/operator-overloading/n + call $std/operator-overloading/Tester#postInc + global.set $std/operator-overloading/incdec + local.get $0 + global.set $std/operator-overloading/tmp + global.get $std/operator-overloading/tmp local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 15 + i32.const 0 i32.eq if (result i32) - global.get $std/operator-overloading/n + global.get $std/operator-overloading/tmp local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 15 + i32.const 1 i32.eq else i32.const 0 @@ -5195,53 +5629,29 @@ if i32.const 0 i32.const 432 - i32.const 181 + i32.const 287 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 3855 - i32.const 255 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/o1 - i32.const 0 - i32.const 61680 - i32.const 0 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/o2 - global.get $std/operator-overloading/o1 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - global.get $std/operator-overloading/o2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.or - global.set $std/operator-overloading/o - global.get $std/operator-overloading/o + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 65535 + i32.const 1 i32.eq if (result i32) - global.get $std/operator-overloading/o + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 255 + i32.const 2 i32.eq else i32.const 0 @@ -5250,53 +5660,43 @@ if i32.const 0 i32.const 432 - i32.const 187 + i32.const 288 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 255 - i32.const 255 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/x1 - i32.const 0 - i32.const 65280 - i32.const 0 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/x2 - global.get $std/operator-overloading/x1 - local.set $9 global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - global.get $std/operator-overloading/x2 + global.get $std/operator-overloading/incdec + local.tee $1 + i32.store offset=12 + local.get $1 local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.xor - global.set $std/operator-overloading/x - global.get $std/operator-overloading/x + call $std/operator-overloading/Tester#postDec + global.set $std/operator-overloading/incdec + local.get $1 + global.set $std/operator-overloading/tmp + global.get $std/operator-overloading/tmp local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:x - i32.const 65535 + i32.const 1 i32.eq if (result i32) - global.get $std/operator-overloading/x + global.get $std/operator-overloading/tmp local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 call $std/operator-overloading/Tester#get:y - i32.const 255 + i32.const 2 i32.eq else i32.const 0 @@ -5305,1286 +5705,920 @@ if i32.const 0 i32.const 432 - i32.const 193 + i32.const 291 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 1 - i32.const -2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/eq1 - i32.const 0 - i32.const 1 - i32.const -2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/eq2 - global.get $std/operator-overloading/eq1 + global.get $std/operator-overloading/incdec local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/eq2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.equals - global.set $std/operator-overloading/eq - global.get $std/operator-overloading/eq - i32.const 1 + call $std/operator-overloading/Tester#get:x + i32.const 0 i32.eq + if (result i32) + global.get $std/operator-overloading/incdec + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/Tester#get:y + i32.const 1 + i32.eq + else + i32.const 0 + end i32.eqz if i32.const 0 i32.const 432 - i32.const 199 + i32.const 292 i32.const 1 call $~lib/builtins/abort unreachable end i32.const 0 i32.const 1 + i32.const 2 + call $std/operator-overloading/TesterInlineStatic#constructor + global.set $std/operator-overloading/ais1 + block $std/operator-overloading/TesterInlineStatic.postInc|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/ais1 + local.tee $3 + i32.store offset=16 + i32.const 0 + local.get $3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:x + i32.const 1 + i32.add + local.get $3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:y + i32.const 1 + i32.add + call $std/operator-overloading/TesterInlineStatic#constructor + br $std/operator-overloading/TesterInlineStatic.postInc|inlined.0 + end + global.set $std/operator-overloading/ais1 i32.const 0 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/eq3 - i32.const 0 - i32.const 0 - i32.const 1 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/eq4 - global.get $std/operator-overloading/eq3 + i32.const 2 + i32.const 3 + call $std/operator-overloading/TesterInlineStatic#constructor + global.set $std/operator-overloading/ais2 + block $std/operator-overloading/TesterInlineStatic.add|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/ais1 + local.tee $4 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/ais2 + local.tee $5 + i32.store offset=24 + i32.const 0 + local.get $4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:x + local.get $5 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:x + i32.add + local.get $4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:y + local.get $5 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:y + i32.add + call $std/operator-overloading/TesterInlineStatic#constructor + br $std/operator-overloading/TesterInlineStatic.add|inlined.0 + end + global.set $std/operator-overloading/ais + global.get $std/operator-overloading/ais local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/eq4 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.equals - global.set $std/operator-overloading/eqf - global.get $std/operator-overloading/eqf - i32.const 0 + call $std/operator-overloading/TesterInlineStatic#get:x + i32.const 4 i32.eq + if (result i32) + global.get $std/operator-overloading/ais + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineStatic#get:y + i32.const 6 + i32.eq + else + i32.const 0 + end i32.eqz if i32.const 0 i32.const 432 - i32.const 205 + i32.const 312 i32.const 1 call $~lib/builtins/abort unreachable end - global.get $std/operator-overloading/eq1 + i32.const 0 + i32.const 1 + i32.const 2 + call $std/operator-overloading/TesterInlineInstance#constructor + global.set $std/operator-overloading/aii1 + block $std/operator-overloading/TesterInlineInstance#postInc|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/aii1 + local.tee $6 + i32.store offset=28 + i32.const 0 + local.get $6 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:x + i32.const 1 + i32.add + local.get $6 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:y + i32.const 1 + i32.add + call $std/operator-overloading/TesterInlineInstance#constructor + br $std/operator-overloading/TesterInlineInstance#postInc|inlined.0 + end + global.set $std/operator-overloading/aii1 + i32.const 0 + i32.const 2 + i32.const 3 + call $std/operator-overloading/TesterInlineInstance#constructor + global.set $std/operator-overloading/aii2 + block $std/operator-overloading/TesterInlineInstance#add|inlined.0 (result i32) + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/aii1 + local.tee $7 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + global.get $std/operator-overloading/aii2 + local.tee $8 + i32.store offset=36 + i32.const 0 + local.get $7 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:x + local.get $8 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:x + i32.add + local.get $7 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:y + local.get $8 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:y + i32.add + call $std/operator-overloading/TesterInlineInstance#constructor + br $std/operator-overloading/TesterInlineInstance#add|inlined.0 + end + global.set $std/operator-overloading/aii + global.get $std/operator-overloading/aii local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/eq2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.notEquals - global.set $std/operator-overloading/eq - global.get $std/operator-overloading/eq - i32.const 0 + call $std/operator-overloading/TesterInlineInstance#get:x + i32.const 4 i32.eq + if (result i32) + global.get $std/operator-overloading/aii + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $std/operator-overloading/TesterInlineInstance#get:y + i32.const 6 + i32.eq + else + i32.const 0 + end i32.eqz if i32.const 0 i32.const 432 - i32.const 209 + i32.const 332 i32.const 1 call $~lib/builtins/abort unreachable end - global.get $std/operator-overloading/eq3 + i32.const 0 + i32.const 1 + i32.const 2 + call $std/operator-overloading/TesterElementAccess#constructor + global.set $std/operator-overloading/tea + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/eq4 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.notEquals - global.set $std/operator-overloading/eqf - global.get $std/operator-overloading/eqf - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 432 - i32.const 213 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 2 - global.get $~lib/builtins/i32.MAX_VALUE - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/gt1 - i32.const 0 - i32.const 1 - i32.const 0 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/gt2 - global.get $std/operator-overloading/gt1 + i32.const 512 + i32.const -1 + call $std/operator-overloading/TesterElementAccess#__set + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/gt2 + i32.const 544 + i32.const -2 + call $std/operator-overloading/TesterElementAccess#__set + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store offset=4 + i32.store local.get $9 - call $std/operator-overloading/Tester.greater - global.set $std/operator-overloading/gt - global.get $std/operator-overloading/gt - i32.const 1 + call $std/operator-overloading/TesterElementAccess#get:x + i32.const -1 i32.eq i32.eqz if i32.const 0 i32.const 432 - i32.const 219 + i32.const 360 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 2 - i32.const 2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/gte1 - i32.const 0 - i32.const 2 - i32.const 2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/gte2 - global.get $std/operator-overloading/gte1 + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/gte2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.greaterEquals - global.set $std/operator-overloading/gte - global.get $std/operator-overloading/gte - i32.const 1 + i32.const 512 + call $std/operator-overloading/TesterElementAccess#__get + i32.const -1 i32.eq i32.eqz if i32.const 0 i32.const 432 - i32.const 225 + i32.const 361 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 5 - i32.const -1 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/le1 - i32.const 0 - i32.const 6 - i32.const 6 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/le2 - global.get $std/operator-overloading/le1 + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/le2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.less - global.set $std/operator-overloading/le - global.get $std/operator-overloading/le - i32.const 1 + call $std/operator-overloading/TesterElementAccess#get:y + i32.const -2 i32.eq i32.eqz if i32.const 0 i32.const 432 - i32.const 231 + i32.const 363 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 4 - i32.const 3 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/leq1 - i32.const 0 - i32.const 4 - i32.const 3 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/leq2 - global.get $std/operator-overloading/leq1 + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - global.get $std/operator-overloading/leq2 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $std/operator-overloading/Tester.lessEquals - global.set $std/operator-overloading/leq - global.get $std/operator-overloading/leq - i32.const 1 + i32.const 544 + call $std/operator-overloading/TesterElementAccess#__get + i32.const -2 i32.eq i32.eqz if i32.const 0 i32.const 432 - i32.const 237 + i32.const 364 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 8 - i32.const 16 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/shr - global.get $std/operator-overloading/shr + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - i32.const 3 - call $std/operator-overloading/Tester.shr - global.set $std/operator-overloading/sres - global.get $std/operator-overloading/sres + i32.const 512 + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store + i32.store offset=4 local.get $9 - call $std/operator-overloading/Tester#get:x + i32.const 512 + call $std/operator-overloading/TesterElementAccess#__get i32.const 1 - i32.eq - if (result i32) - global.get $std/operator-overloading/sres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 2 - i32.eq - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 432 - i32.const 242 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const -8 - i32.const -16 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/shu - global.get $std/operator-overloading/shu - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 3 - call $std/operator-overloading/Tester.shu - global.set $std/operator-overloading/ures - global.get $std/operator-overloading/ures + i32.add + call $std/operator-overloading/TesterElementAccess#__set + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 536870911 - i32.eq - if (result i32) - global.get $std/operator-overloading/ures - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 536870910 - i32.eq - else - i32.const 0 - end - i32.eqz - if - i32.const 0 - i32.const 432 - i32.const 247 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - i32.const 0 - i32.const 1 - i32.const 2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/shl - global.get $std/operator-overloading/shl + i32.const 544 + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 - i32.store + i32.store offset=4 local.get $9 - i32.const 3 - call $std/operator-overloading/Tester.shl - global.set $std/operator-overloading/sres - global.get $std/operator-overloading/sres + i32.const 544 + call $std/operator-overloading/TesterElementAccess#__get + i32.const 1 + i32.sub + call $std/operator-overloading/TesterElementAccess#__set + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 8 + i32.const 512 + call $std/operator-overloading/TesterElementAccess#__get + i32.const 0 i32.eq - if (result i32) - global.get $std/operator-overloading/sres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 16 - i32.eq - else - i32.const 0 - end i32.eqz if i32.const 0 i32.const 432 - i32.const 252 + i32.const 369 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 0 - i32.const 1 - i32.const -2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/pos - global.get $std/operator-overloading/pos - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester.pos - global.set $std/operator-overloading/pres - global.get $std/operator-overloading/pres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - global.get $std/operator-overloading/pos + global.get $std/operator-overloading/tea local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store local.get $9 - call $std/operator-overloading/Tester#get:x + i32.const 544 + call $std/operator-overloading/TesterElementAccess#__get + i32.const -3 i32.eq - if (result i32) - global.get $std/operator-overloading/pres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - global.get $std/operator-overloading/pos - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.eq - else + i32.eqz + if i32.const 0 + i32.const 432 + i32.const 370 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/operator-overloading/a1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/a2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/s1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/s2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/s + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/m1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/m2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/m + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/d1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/d2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/d + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/f1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/f2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/f + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/p1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/p2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/p + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/n1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/n2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/n + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/o1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/o2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/o + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/x1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 257 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const -1 - i32.const -2 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/neg - global.get $std/operator-overloading/neg - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester.neg - global.set $std/operator-overloading/nres - global.get $std/operator-overloading/nres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 0 - global.get $std/operator-overloading/neg - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.sub - i32.eq - if (result i32) - global.get $std/operator-overloading/nres - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 0 - global.get $std/operator-overloading/neg - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.sub - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/x2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/x + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 262 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 255 - i32.const 16 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/not - global.get $std/operator-overloading/not - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester.not - global.set $std/operator-overloading/res - global.get $std/operator-overloading/res - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - global.get $std/operator-overloading/not - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const -1 - i32.xor - i32.eq - if (result i32) - global.get $std/operator-overloading/res - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - global.get $std/operator-overloading/not - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const -1 - i32.xor - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/eq1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/eq2 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 267 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 0 - i32.const 0 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/excl - global.get $std/operator-overloading/excl - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester.excl - global.set $std/operator-overloading/bres - global.get $std/operator-overloading/bres - global.get $std/operator-overloading/excl - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.eqz - if (result i32) - global.get $std/operator-overloading/excl - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.eqz - else - i32.const 0 + global.get $std/operator-overloading/eq3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eq - i32.eqz + global.get $std/operator-overloading/eq4 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 272 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/bres - i32.const 1 - i32.eq - i32.eqz + global.get $std/operator-overloading/gt1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 273 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 0 - i32.const 1 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/incdec - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#inc - global.set $std/operator-overloading/incdec - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.eq - if (result i32) - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 2 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/gt2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/gte1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 279 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#dec - global.set $std/operator-overloading/incdec - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 0 - i32.eq - if (result i32) - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 1 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/gte2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/le1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 282 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 0 - i32.const 1 - call $std/operator-overloading/Tester#constructor - global.set $std/operator-overloading/incdec - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/incdec - local.tee $0 - i32.store offset=8 - local.get $0 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#postInc - global.set $std/operator-overloading/incdec - local.get $0 - global.set $std/operator-overloading/tmp - global.get $std/operator-overloading/tmp - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 0 - i32.eq - if (result i32) - global.get $std/operator-overloading/tmp - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 1 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/le2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/leq1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 287 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.eq - if (result i32) - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 2 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/leq2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/shr + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 288 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/incdec + global.get $std/operator-overloading/sres local.tee $1 - i32.store offset=12 - local.get $1 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#postDec - global.set $std/operator-overloading/incdec - local.get $1 - global.set $std/operator-overloading/tmp - global.get $std/operator-overloading/tmp - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 1 - i32.eq - if (result i32) - global.get $std/operator-overloading/tmp - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 2 - i32.eq - else - i32.const 0 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/shu + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 291 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:x - i32.const 0 - i32.eq - if (result i32) - global.get $std/operator-overloading/incdec - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/Tester#get:y - i32.const 1 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/ures + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/shl + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 292 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/pos + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/operator-overloading/pres + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 1 - i32.const 2 - call $std/operator-overloading/TesterInlineStatic#constructor - global.set $std/operator-overloading/ais1 - block $std/operator-overloading/TesterInlineStatic.postInc|inlined.0 (result i32) - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/ais1 - local.tee $3 - i32.store offset=16 - i32.const 0 - local.get $3 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:x - i32.const 1 - i32.add - local.get $3 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:y - i32.const 1 - i32.add - call $std/operator-overloading/TesterInlineStatic#constructor - br $std/operator-overloading/TesterInlineStatic.postInc|inlined.0 + global.get $std/operator-overloading/neg + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.set $std/operator-overloading/ais1 - i32.const 0 - i32.const 2 - i32.const 3 - call $std/operator-overloading/TesterInlineStatic#constructor - global.set $std/operator-overloading/ais2 - block $std/operator-overloading/TesterInlineStatic.add|inlined.0 (result i32) - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/ais1 - local.tee $4 - i32.store offset=20 - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/ais2 - local.tee $5 - i32.store offset=24 - i32.const 0 - local.get $4 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:x - local.get $5 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:x - i32.add - local.get $4 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:y - local.get $5 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:y - i32.add - call $std/operator-overloading/TesterInlineStatic#constructor - br $std/operator-overloading/TesterInlineStatic.add|inlined.0 + global.get $std/operator-overloading/nres + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.set $std/operator-overloading/ais - global.get $std/operator-overloading/ais - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:x - i32.const 4 - i32.eq - if (result i32) - global.get $std/operator-overloading/ais - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineStatic#get:y - i32.const 6 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/not + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/res + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 312 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 1 - i32.const 2 - call $std/operator-overloading/TesterInlineInstance#constructor - global.set $std/operator-overloading/aii1 - block $std/operator-overloading/TesterInlineInstance#postInc|inlined.0 (result i32) - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/aii1 - local.tee $6 - i32.store offset=28 - i32.const 0 - local.get $6 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:x - i32.const 1 - i32.add - local.get $6 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:y - i32.const 1 - i32.add - call $std/operator-overloading/TesterInlineInstance#constructor - br $std/operator-overloading/TesterInlineInstance#postInc|inlined.0 + global.get $std/operator-overloading/excl + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.set $std/operator-overloading/aii1 - i32.const 0 - i32.const 2 - i32.const 3 - call $std/operator-overloading/TesterInlineInstance#constructor - global.set $std/operator-overloading/aii2 - block $std/operator-overloading/TesterInlineInstance#add|inlined.0 (result i32) - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/aii1 - local.tee $7 - i32.store offset=32 - global.get $~lib/memory/__stack_pointer - global.get $std/operator-overloading/aii2 - local.tee $8 - i32.store offset=36 - i32.const 0 - local.get $7 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:x - local.get $8 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:x - i32.add - local.get $7 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:y - local.get $8 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:y - i32.add - call $std/operator-overloading/TesterInlineInstance#constructor - br $std/operator-overloading/TesterInlineInstance#add|inlined.0 + global.get $std/operator-overloading/incdec + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.set $std/operator-overloading/aii - global.get $std/operator-overloading/aii - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:x - i32.const 4 - i32.eq - if (result i32) - global.get $std/operator-overloading/aii - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterInlineInstance#get:y - i32.const 6 - i32.eq - else - i32.const 0 + global.get $std/operator-overloading/tmp + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.eqz + global.get $std/operator-overloading/ais1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 332 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - i32.const 0 - i32.const 1 - i32.const 2 - call $std/operator-overloading/TesterElementAccess#constructor - global.set $std/operator-overloading/tea - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 512 - i32.const -1 - call $std/operator-overloading/TesterElementAccess#__set - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 544 - i32.const -2 - call $std/operator-overloading/TesterElementAccess#__set - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterElementAccess#get:x - i32.const -1 - i32.eq - i32.eqz + global.get $std/operator-overloading/ais2 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 360 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 512 - call $std/operator-overloading/TesterElementAccess#__get - i32.const -1 - i32.eq - i32.eqz + global.get $std/operator-overloading/ais + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 361 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - call $std/operator-overloading/TesterElementAccess#get:y - i32.const -2 - i32.eq - i32.eqz + global.get $std/operator-overloading/aii1 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 363 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 544 - call $std/operator-overloading/TesterElementAccess#__get - i32.const -2 - i32.eq - i32.eqz + global.get $std/operator-overloading/aii2 + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 364 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 512 - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - i32.const 512 - call $std/operator-overloading/TesterElementAccess#__get - i32.const 1 - i32.add - call $std/operator-overloading/TesterElementAccess#__set - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 544 - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - i32.const 544 - call $std/operator-overloading/TesterElementAccess#__get - i32.const 1 - i32.sub - call $std/operator-overloading/TesterElementAccess#__set - global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 512 - call $std/operator-overloading/TesterElementAccess#__get - i32.const 0 - i32.eq - i32.eqz + global.get $std/operator-overloading/aii + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 369 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end global.get $std/operator-overloading/tea - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store - local.get $9 - i32.const 544 - call $std/operator-overloading/TesterElementAccess#__get - i32.const -3 - i32.eq - i32.eqz + local.tee $1 if - i32.const 0 - i32.const 432 - i32.const 370 - i32.const 1 - call $~lib/builtins/abort - unreachable + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit end - global.get $~lib/memory/__stack_pointer - i32.const 40 - i32.add - global.set $~lib/memory/__stack_pointer + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $std/operator-overloading/TesterElementAccess + block $std/operator-overloading/TesterInlineInstance + block $std/operator-overloading/TesterInlineStatic + block $std/operator-overloading/Tester + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $std/operator-overloading/Tester $std/operator-overloading/TesterInlineStatic $std/operator-overloading/TesterInlineInstance $std/operator-overloading/TesterElementAccess $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + return + end + return + end + unreachable ) ) diff --git a/tests/compiler/std/operator-overloading.release.wat b/tests/compiler/std/operator-overloading.release.wat index d352f0f211..f880de41e1 100644 --- a/tests/compiler/std/operator-overloading.release.wat +++ b/tests/compiler/std/operator-overloading.release.wat @@ -2,13 +2,13 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -107,6 +107,41 @@ (data $11 (i32.const 1584) "\08\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1620 + i32.lt_s + if + i32.const 34416 + i32.const 34464 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -145,7 +180,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$334 + block $__inlined_func$~lib/rt/itcms/Object#unlink$335 local.get $1 i32.load offset=4 i32.const -4 @@ -169,7 +204,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$334 + br $__inlined_func$~lib/rt/itcms/Object#unlink$335 end local.get $1 i32.load offset=8 @@ -212,7 +247,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/pointer.debug.wat b/tests/compiler/std/pointer.debug.wat index 9381398907..5c38fbf27e 100644 --- a/tests/compiler/std/pointer.debug.wat +++ b/tests/compiler/std/pointer.debug.wat @@ -1,15 +1,20 @@ (module - (type $0 (func (param i32 i32))) - (type $1 (func (param i32) (result i32))) - (type $2 (func)) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $0 (func)) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32))) + (type $3 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/pointer/one (mut i32) (i32.const 0)) (global $std/pointer/two (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $std/pointer/add (mut i32) (i32.const 0)) (global $std/pointer/sub (mut i32) (i32.const 0)) (global $std/pointer/nextOne (mut i32) (i32.const 0)) (global $std/pointer/buf (mut i32) (i32.const 0)) + (global $std/pointer/nullPtr (mut i32) (i32.const 0)) + (global $std/pointer/same (mut i32) (i32.const 0)) + (global $std/pointer/src (mut i32) (i32.const 0)) + (global $std/pointer/dst (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 60)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32828)) (global $~lib/memory/__heap_base i32 (i32.const 32828)) @@ -96,29 +101,59 @@ (local $this|55 i32) (local $value|56 f32) (local $this|57 i32) - block $std/pointer/Pointer#constructor|inlined.0 (result i32) + (local $this|58 i32) + (local $this|59 i32) + (local $this|60 i32) + (local $offset|61 i32) + (local $this|62 i32) + (local $other|63 i32) + (local $this|64 i32) + (local $other|65 i32) + (local $this|66 i32) + (local $offset|67 i32) + (local $this|68 i32) + (local $index|69 i32) + (local $value|70 i32) + (local $this|71 i32) + (local $index|72 i32) + (local $value|73 i32) + (local $this|74 i32) + (local $index|75 i32) + (local $value|76 i32) + (local $this|77 i32) + (local $offset|78 i32) + (local $this|79 i32) + (local $dst i32) + (local $count i32) + (local $this|82 i32) + (local $index|83 i32) + (local $this|84 i32) + (local $index|85 i32) + (local $this|86 i32) + (local $index|87 i32) + block $~lib/pointer/Pointer#constructor|inlined.0 (result i32) i32.const 0 local.set $this i32.const 8 local.set $offset local.get $offset - br $std/pointer/Pointer#constructor|inlined.0 + br $~lib/pointer/Pointer#constructor|inlined.0 end global.set $std/pointer/one - block $std/pointer/Pointer#constructor|inlined.1 (result i32) + block $~lib/pointer/Pointer#constructor|inlined.1 (result i32) i32.const 0 local.set $this|2 i32.const 24 local.set $offset|3 local.get $offset|3 - br $std/pointer/Pointer#constructor|inlined.1 + br $~lib/pointer/Pointer#constructor|inlined.1 end global.set $std/pointer/two - block $std/pointer/Pointer#get:offset|inlined.0 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.0 (result i32) global.get $std/pointer/one local.set $this|4 local.get $this|4 - br $std/pointer/Pointer#get:offset|inlined.0 + br $~lib/pointer/Pointer#get:offset|inlined.0 end i32.const 8 i32.eq @@ -126,16 +161,16 @@ if i32.const 0 i32.const 32 - i32.const 78 + i32.const 11 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:offset|inlined.1 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.1 (result i32) global.get $std/pointer/two local.set $this|5 local.get $this|5 - br $std/pointer/Pointer#get:offset|inlined.1 + br $~lib/pointer/Pointer#get:offset|inlined.1 end i32.const 24 i32.eq @@ -143,38 +178,38 @@ if i32.const 0 i32.const 32 - i32.const 79 + i32.const 12 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.0 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.0 (result i32) global.get $std/pointer/one local.set $this|6 i32.const 1 drop local.get $this|6 - br $std/pointer/Pointer#get:value|inlined.0 + br $~lib/pointer/Pointer#get:value|inlined.0 end i32.const 1 call $std/pointer/Entry#set:key - block $std/pointer/Pointer#get:value|inlined.1 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.1 (result i32) global.get $std/pointer/one local.set $this|7 i32.const 1 drop local.get $this|7 - br $std/pointer/Pointer#get:value|inlined.1 + br $~lib/pointer/Pointer#get:value|inlined.1 end i32.const 2 call $std/pointer/Entry#set:val - block $std/pointer/Pointer#get:value|inlined.2 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.2 (result i32) global.get $std/pointer/one local.set $this|8 i32.const 1 drop local.get $this|8 - br $std/pointer/Pointer#get:value|inlined.2 + br $~lib/pointer/Pointer#get:value|inlined.2 end call $std/pointer/Entry#get:key i32.const 1 @@ -183,18 +218,18 @@ if i32.const 0 i32.const 32 - i32.const 83 + i32.const 16 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.3 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.3 (result i32) global.get $std/pointer/one local.set $this|9 i32.const 1 drop local.get $this|9 - br $std/pointer/Pointer#get:value|inlined.3 + br $~lib/pointer/Pointer#get:value|inlined.3 end call $std/pointer/Entry#get:val i32.const 2 @@ -203,12 +238,12 @@ if i32.const 0 i32.const 32 - i32.const 84 + i32.const 17 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#add|inlined.0 (result i32) + block $~lib/pointer/Pointer#add|inlined.0 (result i32) global.get $std/pointer/one local.set $this|10 global.get $std/pointer/two @@ -216,14 +251,14 @@ local.get $this|10 local.get $other i32.add - br $std/pointer/Pointer#add|inlined.0 + br $~lib/pointer/Pointer#add|inlined.0 end global.set $std/pointer/add - block $std/pointer/Pointer#get:offset|inlined.2 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.2 (result i32) global.get $std/pointer/add local.set $this|12 local.get $this|12 - br $std/pointer/Pointer#get:offset|inlined.2 + br $~lib/pointer/Pointer#get:offset|inlined.2 end i32.const 32 i32.eq @@ -231,12 +266,12 @@ if i32.const 0 i32.const 32 - i32.const 87 + i32.const 20 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#sub|inlined.0 (result i32) + block $~lib/pointer/Pointer#sub|inlined.0 (result i32) global.get $std/pointer/two local.set $this|13 global.get $std/pointer/one @@ -244,14 +279,14 @@ local.get $this|13 local.get $other|14 i32.sub - br $std/pointer/Pointer#sub|inlined.0 + br $~lib/pointer/Pointer#sub|inlined.0 end global.set $std/pointer/sub - block $std/pointer/Pointer#get:offset|inlined.3 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.3 (result i32) global.get $std/pointer/sub local.set $this|15 local.get $this|15 - br $std/pointer/Pointer#get:offset|inlined.3 + br $~lib/pointer/Pointer#get:offset|inlined.3 end i32.const 16 i32.eq @@ -259,16 +294,16 @@ if i32.const 0 i32.const 32 - i32.const 90 + i32.const 23 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:offset|inlined.4 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.4 (result i32) global.get $std/pointer/one local.set $this|16 local.get $this|16 - br $std/pointer/Pointer#get:offset|inlined.4 + br $~lib/pointer/Pointer#get:offset|inlined.4 end i32.const 8 i32.eq @@ -276,18 +311,18 @@ if i32.const 0 i32.const 32 - i32.const 92 + i32.const 25 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#inc|inlined.0 (result i32) + block $~lib/pointer/Pointer#inc|inlined.0 (result i32) global.get $std/pointer/one local.set $this|17 local.get $this|17 i32.const 8 i32.add - br $std/pointer/Pointer#inc|inlined.0 + br $~lib/pointer/Pointer#inc|inlined.0 end global.set $std/pointer/one global.get $std/pointer/one @@ -299,16 +334,16 @@ if i32.const 0 i32.const 32 - i32.const 94 + i32.const 27 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:offset|inlined.5 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.5 (result i32) global.get $std/pointer/one local.set $this|18 local.get $this|18 - br $std/pointer/Pointer#get:offset|inlined.5 + br $~lib/pointer/Pointer#get:offset|inlined.5 end i32.const 16 i32.eq @@ -316,16 +351,16 @@ if i32.const 0 i32.const 32 - i32.const 95 + i32.const 28 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:offset|inlined.6 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.6 (result i32) global.get $std/pointer/two local.set $this|19 local.get $this|19 - br $std/pointer/Pointer#get:offset|inlined.6 + br $~lib/pointer/Pointer#get:offset|inlined.6 end i32.const 24 i32.eq @@ -333,34 +368,34 @@ if i32.const 0 i32.const 32 - i32.const 97 + i32.const 30 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#dec|inlined.0 (result i32) + block $~lib/pointer/Pointer#dec|inlined.0 (result i32) global.get $std/pointer/two local.set $this|20 local.get $this|20 i32.const 8 i32.sub - br $std/pointer/Pointer#dec|inlined.0 + br $~lib/pointer/Pointer#dec|inlined.0 end global.set $std/pointer/two - block $std/pointer/Pointer#dec|inlined.1 (result i32) + block $~lib/pointer/Pointer#dec|inlined.1 (result i32) global.get $std/pointer/two local.set $this|21 local.get $this|21 i32.const 8 i32.sub - br $std/pointer/Pointer#dec|inlined.1 + br $~lib/pointer/Pointer#dec|inlined.1 end global.set $std/pointer/two - block $std/pointer/Pointer#get:offset|inlined.7 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.7 (result i32) global.get $std/pointer/two local.set $this|22 local.get $this|22 - br $std/pointer/Pointer#get:offset|inlined.7 + br $~lib/pointer/Pointer#get:offset|inlined.7 end i32.const 8 i32.eq @@ -368,18 +403,18 @@ if i32.const 0 i32.const 32 - i32.const 100 + i32.const 33 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.4 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.4 (result i32) global.get $std/pointer/two local.set $this|23 i32.const 1 drop local.get $this|23 - br $std/pointer/Pointer#get:value|inlined.4 + br $~lib/pointer/Pointer#get:value|inlined.4 end call $std/pointer/Entry#get:key i32.const 1 @@ -388,18 +423,18 @@ if i32.const 0 i32.const 32 - i32.const 101 + i32.const 34 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.5 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.5 (result i32) global.get $std/pointer/two local.set $this|24 i32.const 1 drop local.get $this|24 - br $std/pointer/Pointer#get:value|inlined.5 + br $~lib/pointer/Pointer#get:value|inlined.5 end call $std/pointer/Entry#get:val i32.const 2 @@ -408,20 +443,20 @@ if i32.const 0 i32.const 32 - i32.const 102 + i32.const 35 i32.const 1 call $~lib/builtins/abort unreachable end global.get $std/pointer/one local.set $this|26 - block $std/pointer/Pointer#get:value|inlined.6 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.6 (result i32) global.get $std/pointer/two local.set $this|25 i32.const 1 drop local.get $this|25 - br $std/pointer/Pointer#get:value|inlined.6 + br $~lib/pointer/Pointer#get:value|inlined.6 end local.set $value i32.const 1 @@ -442,35 +477,35 @@ i32.const 8 memory.copy end - block $std/pointer/Pointer#get:offset|inlined.8 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.8 (result i32) global.get $std/pointer/one local.set $this|28 local.get $this|28 - br $std/pointer/Pointer#get:offset|inlined.8 + br $~lib/pointer/Pointer#get:offset|inlined.8 end - block $std/pointer/Pointer#get:offset|inlined.9 (result i32) + block $~lib/pointer/Pointer#get:offset|inlined.9 (result i32) global.get $std/pointer/two local.set $this|29 local.get $this|29 - br $std/pointer/Pointer#get:offset|inlined.9 + br $~lib/pointer/Pointer#get:offset|inlined.9 end i32.ne i32.eqz if i32.const 0 i32.const 32 - i32.const 105 + i32.const 38 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.7 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.7 (result i32) global.get $std/pointer/one local.set $this|30 i32.const 1 drop local.get $this|30 - br $std/pointer/Pointer#get:value|inlined.7 + br $~lib/pointer/Pointer#get:value|inlined.7 end call $std/pointer/Entry#get:key i32.const 1 @@ -479,18 +514,18 @@ if i32.const 0 i32.const 32 - i32.const 106 + i32.const 39 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get:value|inlined.8 (result i32) + block $~lib/pointer/Pointer#get:value|inlined.8 (result i32) global.get $std/pointer/one local.set $this|31 i32.const 1 drop local.get $this|31 - br $std/pointer/Pointer#get:value|inlined.8 + br $~lib/pointer/Pointer#get:value|inlined.8 end call $std/pointer/Entry#get:val i32.const 2 @@ -499,18 +534,18 @@ if i32.const 0 i32.const 32 - i32.const 107 + i32.const 40 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#constructor|inlined.0 (result i32) + block $~lib/pointer/Pointer#constructor|inlined.0 (result i32) i32.const 0 local.set $this|32 i32.const 0 local.set $offset|33 local.get $offset|33 - br $std/pointer/Pointer#constructor|inlined.0 + br $~lib/pointer/Pointer#constructor|inlined.0 end global.set $std/pointer/buf global.get $std/pointer/buf @@ -539,7 +574,7 @@ i32.add local.get $value|39 f32.store - block $std/pointer/Pointer#get|inlined.0 (result f32) + block $~lib/pointer/Pointer#get|inlined.0 (result f32) global.get $std/pointer/buf local.set $this|40 i32.const 0 @@ -550,7 +585,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.0 + br $~lib/pointer/Pointer#get|inlined.0 end f32.const 1.100000023841858 f32.eq @@ -558,12 +593,12 @@ if i32.const 0 i32.const 32 - i32.const 113 + i32.const 46 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get|inlined.1 (result f32) + block $~lib/pointer/Pointer#get|inlined.1 (result f32) global.get $std/pointer/buf local.set $this|42 i32.const 1 @@ -574,7 +609,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.1 + br $~lib/pointer/Pointer#get|inlined.1 end f32.const 1.2000000476837158 f32.eq @@ -582,12 +617,12 @@ if i32.const 0 i32.const 32 - i32.const 114 + i32.const 47 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get|inlined.2 (result f32) + block $~lib/pointer/Pointer#get|inlined.2 (result f32) global.get $std/pointer/buf local.set $this|44 i32.const 0 @@ -598,7 +633,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.2 + br $~lib/pointer/Pointer#get|inlined.2 end f32.const 1.100000023841858 f32.eq @@ -606,12 +641,12 @@ if i32.const 0 i32.const 32 - i32.const 116 + i32.const 49 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get|inlined.3 (result f32) + block $~lib/pointer/Pointer#get|inlined.3 (result f32) global.get $std/pointer/buf local.set $this|46 i32.const 1 @@ -622,7 +657,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.3 + br $~lib/pointer/Pointer#get|inlined.3 end f32.const 1.2000000476837158 f32.eq @@ -630,7 +665,7 @@ if i32.const 0 i32.const 32 - i32.const 117 + i32.const 50 i32.const 1 call $~lib/builtins/abort unreachable @@ -643,7 +678,7 @@ if i32.const 0 i32.const 32 - i32.const 119 + i32.const 52 i32.const 1 call $~lib/builtins/abort unreachable @@ -656,7 +691,7 @@ if i32.const 0 i32.const 32 - i32.const 120 + i32.const 53 i32.const 1 call $~lib/builtins/abort unreachable @@ -674,7 +709,7 @@ i32.add local.get $value|50 f32.store - block $std/pointer/Pointer#get|inlined.4 (result f32) + block $~lib/pointer/Pointer#get|inlined.4 (result f32) global.get $std/pointer/buf local.set $this|51 i32.const 2 @@ -685,7 +720,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.4 + br $~lib/pointer/Pointer#get|inlined.4 end f32.const 1.2999999523162842 f32.eq @@ -693,12 +728,12 @@ if i32.const 0 i32.const 32 - i32.const 123 + i32.const 56 i32.const 1 call $~lib/builtins/abort unreachable end - block $std/pointer/Pointer#get|inlined.5 (result f32) + block $~lib/pointer/Pointer#get|inlined.5 (result f32) global.get $std/pointer/buf local.set $this|53 i32.const 2 @@ -709,7 +744,7 @@ i32.mul i32.add f32.load - br $std/pointer/Pointer#get|inlined.5 + br $~lib/pointer/Pointer#get|inlined.5 end f32.const 1.2999999523162842 f32.eq @@ -717,7 +752,7 @@ if i32.const 0 i32.const 32 - i32.const 124 + i32.const 57 i32.const 1 call $~lib/builtins/abort unreachable @@ -730,7 +765,7 @@ if i32.const 0 i32.const 32 - i32.const 125 + i32.const 58 i32.const 1 call $~lib/builtins/abort unreachable @@ -744,14 +779,14 @@ local.get $this|55 local.get $value|56 f32.store - block $std/pointer/Pointer#get:value|inlined.0 (result f32) + block $~lib/pointer/Pointer#get:value|inlined.0 (result f32) global.get $std/pointer/buf local.set $this|57 i32.const 0 drop local.get $this|57 f32.load - br $std/pointer/Pointer#get:value|inlined.0 + br $~lib/pointer/Pointer#get:value|inlined.0 end f32.const 1.399999976158142 f32.eq @@ -759,7 +794,7 @@ if i32.const 0 i32.const 32 - i32.const 128 + i32.const 61 i32.const 1 call $~lib/builtins/abort unreachable @@ -772,7 +807,240 @@ if i32.const 0 i32.const 32 - i32.const 129 + i32.const 62 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer.null|inlined.0 (result i32) + i32.const 0 + br $~lib/pointer/Pointer.null|inlined.0 + end + global.set $std/pointer/nullPtr + block $~lib/pointer/Pointer#isNull|inlined.0 (result i32) + global.get $std/pointer/nullPtr + local.set $this|58 + local.get $this|58 + i32.const 0 + i32.eq + br $~lib/pointer/Pointer#isNull|inlined.0 + end + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 68 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#isNull|inlined.0 (result i32) + global.get $std/pointer/one + local.set $this|59 + local.get $this|59 + i32.const 0 + i32.eq + br $~lib/pointer/Pointer#isNull|inlined.0 + end + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#constructor|inlined.2 (result i32) + i32.const 0 + local.set $this|60 + i32.const 8 + local.set $offset|61 + local.get $offset|61 + br $~lib/pointer/Pointer#constructor|inlined.2 + end + global.set $std/pointer/same + block $~lib/pointer/Pointer#equals|inlined.0 (result i32) + global.get $std/pointer/two + local.set $this|62 + global.get $std/pointer/same + local.set $other|63 + local.get $this|62 + local.get $other|63 + i32.eq + br $~lib/pointer/Pointer#equals|inlined.0 + end + i32.const 0 + i32.ne + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 73 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#equals|inlined.1 (result i32) + global.get $std/pointer/one + local.set $this|64 + global.get $std/pointer/two + local.set $other|65 + local.get $this|64 + local.get $other|65 + i32.eq + br $~lib/pointer/Pointer#equals|inlined.1 + end + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#constructor|inlined.0 (result i32) + i32.const 0 + local.set $this|66 + i32.const 100 + local.set $offset|67 + local.get $offset|67 + br $~lib/pointer/Pointer#constructor|inlined.0 + end + global.set $std/pointer/src + global.get $std/pointer/src + local.set $this|68 + i32.const 0 + local.set $index|69 + i32.const 10 + local.set $value|70 + local.get $this|68 + local.get $index|69 + i32.const 4 + i32.mul + i32.add + local.get $value|70 + i32.store + global.get $std/pointer/src + local.set $this|71 + i32.const 1 + local.set $index|72 + i32.const 20 + local.set $value|73 + local.get $this|71 + local.get $index|72 + i32.const 4 + i32.mul + i32.add + local.get $value|73 + i32.store + global.get $std/pointer/src + local.set $this|74 + i32.const 2 + local.set $index|75 + i32.const 30 + local.set $value|76 + local.get $this|74 + local.get $index|75 + i32.const 4 + i32.mul + i32.add + local.get $value|76 + i32.store + block $~lib/pointer/Pointer#constructor|inlined.1 (result i32) + i32.const 0 + local.set $this|77 + i32.const 200 + local.set $offset|78 + local.get $offset|78 + br $~lib/pointer/Pointer#constructor|inlined.1 + end + global.set $std/pointer/dst + global.get $std/pointer/src + local.set $this|79 + global.get $std/pointer/dst + local.set $dst + i32.const 3 + local.set $count + local.get $dst + local.get $this|79 + local.get $count + i32.const 4 + i32.mul + memory.copy + block $~lib/pointer/Pointer#get|inlined.0 (result i32) + global.get $std/pointer/dst + local.set $this|82 + i32.const 0 + local.set $index|83 + local.get $this|82 + local.get $index|83 + i32.const 4 + i32.mul + i32.add + i32.load + br $~lib/pointer/Pointer#get|inlined.0 + end + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 84 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get|inlined.1 (result i32) + global.get $std/pointer/dst + local.set $this|84 + i32.const 1 + local.set $index|85 + local.get $this|84 + local.get $index|85 + i32.const 4 + i32.mul + i32.add + i32.load + br $~lib/pointer/Pointer#get|inlined.1 + end + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 85 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + block $~lib/pointer/Pointer#get|inlined.2 (result i32) + global.get $std/pointer/dst + local.set $this|86 + i32.const 2 + local.set $index|87 + local.get $this|86 + local.get $index|87 + i32.const 4 + i32.mul + i32.add + i32.load + br $~lib/pointer/Pointer#get|inlined.2 + end + i32.const 30 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 86 i32.const 1 call $~lib/builtins/abort unreachable @@ -781,4 +1049,49 @@ (func $~start call $start:std/pointer ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 32848 + i32.const 32896 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/pointer.release.wat b/tests/compiler/std/pointer.release.wat index 59ac04a1e5..0eb6cc52e1 100644 --- a/tests/compiler/std/pointer.release.wat +++ b/tests/compiler/std/pointer.release.wat @@ -1,17 +1,54 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/pointer/one (mut i32) (i32.const 0)) (global $std/pointer/two (mut i32) (i32.const 0)) (global $std/pointer/add (mut i32) (i32.const 0)) (global $std/pointer/sub (mut i32) (i32.const 0)) (global $std/pointer/nextOne (mut i32) (i32.const 0)) + (global $std/pointer/dst (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33852)) (memory $0 1) (data $0 (i32.const 1036) ",") (data $0.1 (i32.const 1048) "\02\00\00\00\1c\00\00\00s\00t\00d\00/\00p\00o\00i\00n\00t\00e\00r\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1084 + i32.lt_s + if + i32.const 33872 + i32.const 33920 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start call $start:std/pointer ) @@ -35,8 +72,7 @@ if i32.const 0 i32.const 1056 - i32.const 83 - i32.const 1 + i32.const 16 call $~lib/builtins/abort unreachable end @@ -47,8 +83,7 @@ if i32.const 0 i32.const 1056 - i32.const 84 - i32.const 1 + i32.const 17 call $~lib/builtins/abort unreachable end @@ -62,8 +97,7 @@ if i32.const 0 i32.const 1056 - i32.const 87 - i32.const 1 + i32.const 20 call $~lib/builtins/abort unreachable end @@ -77,8 +111,7 @@ if i32.const 0 i32.const 1056 - i32.const 90 - i32.const 1 + i32.const 23 call $~lib/builtins/abort unreachable end @@ -88,8 +121,7 @@ if i32.const 0 i32.const 1056 - i32.const 92 - i32.const 1 + i32.const 25 call $~lib/builtins/abort unreachable end @@ -105,8 +137,7 @@ if i32.const 0 i32.const 1056 - i32.const 94 - i32.const 1 + i32.const 27 call $~lib/builtins/abort unreachable end @@ -116,8 +147,7 @@ if i32.const 0 i32.const 1056 - i32.const 95 - i32.const 1 + i32.const 28 call $~lib/builtins/abort unreachable end @@ -127,8 +157,7 @@ if i32.const 0 i32.const 1056 - i32.const 97 - i32.const 1 + i32.const 30 call $~lib/builtins/abort unreachable end @@ -146,8 +175,7 @@ if i32.const 0 i32.const 1056 - i32.const 100 - i32.const 1 + i32.const 33 call $~lib/builtins/abort unreachable end @@ -158,8 +186,7 @@ if i32.const 0 i32.const 1056 - i32.const 101 - i32.const 1 + i32.const 34 call $~lib/builtins/abort unreachable end @@ -170,8 +197,7 @@ if i32.const 0 i32.const 1056 - i32.const 102 - i32.const 1 + i32.const 35 call $~lib/builtins/abort unreachable end @@ -195,8 +221,7 @@ if i32.const 0 i32.const 1056 - i32.const 105 - i32.const 1 + i32.const 38 call $~lib/builtins/abort unreachable end @@ -207,8 +232,7 @@ if i32.const 0 i32.const 1056 - i32.const 106 - i32.const 1 + i32.const 39 call $~lib/builtins/abort unreachable end @@ -219,8 +243,7 @@ if i32.const 0 i32.const 1056 - i32.const 107 - i32.const 1 + i32.const 40 call $~lib/builtins/abort unreachable end @@ -237,8 +260,7 @@ if i32.const 0 i32.const 1056 - i32.const 113 - i32.const 1 + i32.const 46 call $~lib/builtins/abort unreachable end @@ -249,8 +271,7 @@ if i32.const 0 i32.const 1056 - i32.const 114 - i32.const 1 + i32.const 47 call $~lib/builtins/abort unreachable end @@ -261,8 +282,7 @@ if i32.const 0 i32.const 1056 - i32.const 116 - i32.const 1 + i32.const 49 call $~lib/builtins/abort unreachable end @@ -273,8 +293,7 @@ if i32.const 0 i32.const 1056 - i32.const 117 - i32.const 1 + i32.const 50 call $~lib/builtins/abort unreachable end @@ -285,8 +304,7 @@ if i32.const 0 i32.const 1056 - i32.const 119 - i32.const 1 + i32.const 52 call $~lib/builtins/abort unreachable end @@ -297,8 +315,7 @@ if i32.const 0 i32.const 1056 - i32.const 120 - i32.const 1 + i32.const 53 call $~lib/builtins/abort unreachable end @@ -312,8 +329,7 @@ if i32.const 0 i32.const 1056 - i32.const 123 - i32.const 1 + i32.const 56 call $~lib/builtins/abort unreachable end @@ -324,8 +340,7 @@ if i32.const 0 i32.const 1056 - i32.const 124 - i32.const 1 + i32.const 57 call $~lib/builtins/abort unreachable end @@ -336,8 +351,7 @@ if i32.const 0 i32.const 1056 - i32.const 125 - i32.const 1 + i32.const 58 call $~lib/builtins/abort unreachable end @@ -351,8 +365,7 @@ if i32.const 0 i32.const 1056 - i32.const 128 - i32.const 1 + i32.const 61 call $~lib/builtins/abort unreachable end @@ -363,8 +376,84 @@ if i32.const 0 i32.const 1056 - i32.const 129 - i32.const 1 + i32.const 62 + call $~lib/builtins/abort + unreachable + end + global.get $std/pointer/one + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 69 + call $~lib/builtins/abort + unreachable + end + global.get $std/pointer/two + i32.const 8 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 73 + call $~lib/builtins/abort + unreachable + end + global.get $std/pointer/one + global.get $std/pointer/two + i32.eq + if + i32.const 0 + i32.const 1056 + i32.const 74 + call $~lib/builtins/abort + unreachable + end + i32.const 100 + i32.const 10 + i32.store + i32.const 104 + i32.const 20 + i32.store + i32.const 108 + i32.const 30 + i32.store + i32.const 200 + global.set $std/pointer/dst + i32.const 200 + i32.const 100 + i32.const 12 + memory.copy + i32.const 200 + i32.load + i32.const 10 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 84 + call $~lib/builtins/abort + unreachable + end + global.get $std/pointer/dst + i32.load offset=4 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 85 + call $~lib/builtins/abort + unreachable + end + global.get $std/pointer/dst + i32.load offset=8 + i32.const 30 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 86 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/std/pointer.ts b/tests/compiler/std/pointer.ts index dc3c1a2435..f6d279380f 100644 --- a/tests/compiler/std/pointer.ts +++ b/tests/compiler/std/pointer.ts @@ -1,71 +1,4 @@ -// A pointer arithmetic experiment - -@final @unmanaged class Pointer { - - @inline constructor(offset: usize = 0) { - return changetype>(offset); - } - - @inline get offset(): usize { - return changetype(this); - } - - @inline get value(): T { - if (isReference()) { - return changetype(changetype(this)); - } else { - return load(changetype(this)); - } - } - - @inline set value(value: T) { - if (isReference()) { - if (isManaged()) ERROR("Unsafe unmanaged set of a managed object"); - if (value == null) { - memory.fill(changetype(this), 0, offsetof()); - } else { - memory.copy(changetype(this), changetype(value), offsetof()); - } - } else { - store(changetype(this), value); - } - } - - // FIXME: in general, inlining any of the following always yields a block. one could argue that - // this helps debuggability, or that it is unnecessary overhead due to the simplicity of the - // functions. a compromise could be to inline a block consisting of a single 'return' as is, - // where possible. - - @inline @operator("+") add(other: Pointer): Pointer { - return changetype>(changetype(this) + changetype(other)); - } - - @inline @operator("-") sub(other: Pointer): Pointer { - return changetype>(changetype(this) - changetype(other)); - } - - @inline @operator.prefix("++") inc(): Pointer { - // FIXME: this should take alignment into account, but then would require a new builtin to - // determine the minimal alignment of a struct by evaluating its field layout. - const size = isReference() ? offsetof() : sizeof(); - return changetype>(changetype(this) + size); - } - - @inline @operator.prefix("--") dec(): Pointer { - const size = isReference() ? offsetof() : sizeof(); - return changetype>(changetype(this) - size); - } - - @inline @operator("[]") get(index: i32): T { - const size = isReference() ? offsetof() : sizeof(); - return load(changetype(this) + (index * size)); - } - - @inline @operator("[]=") set(index: i32, value: T): void { - const size = isReference() ? offsetof() : sizeof(); - store(changetype(this) + (index * size), value); - } -} +import { Pointer } from "pointer"; @unmanaged class Entry { @@ -127,3 +60,27 @@ assert(load(8) == 1.3); buf.value = 1.4; assert(buf.value == 1.4); assert(load(0) == 1.4); + +// New methods + +// isNull +var nullPtr = Pointer.null(); +assert(nullPtr.isNull()); +assert(!one.isNull()); + +// equals +var same = new Pointer(8); +assert(two.equals(same)); +assert(!one.equals(two)); + +// copyTo +var src = new Pointer(100); +src[0] = 10; +src[1] = 20; +src[2] = 30; + +var dst = new Pointer(200); +src.copyTo(dst, 3); +assert(dst[0] == 10); +assert(dst[1] == 20); +assert(dst[2] == 30); diff --git a/tests/compiler/std/set.debug.wat b/tests/compiler/std/set.debug.wat index 3f49782b9d..a7de555fad 100644 --- a/tests/compiler/std/set.debug.wat +++ b/tests/compiler/std/set.debug.wat @@ -7,9 +7,9 @@ (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i32) (result i32))) (type $7 (func (param i32 i64) (result i32))) - (type $8 (func (param i32 f32) (result i32))) - (type $9 (func (param i32 f64) (result i32))) - (type $10 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 f32) (result i32))) + (type $10 (func (param i32 f64) (result i32))) (type $11 (func (param i64) (result i32))) (type $12 (func (param i32) (result i64))) (type $13 (func (param i32 i64))) @@ -30,7 +30,8 @@ (type $28 (func (param i32 f64 i32) (result i32))) (type $29 (func (param i32 i32 f64))) (type $30 (func (param i32 i32) (result f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -42,6 +43,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -251,7 +253,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -4332,515 +4334,178 @@ call $std/set/testNumeric call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 432 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit + (func $~start + call $start:std/set ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33520 + i32.const 33568 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/set/Set#__visit + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/set/Set#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.const 0 + i32.const 4 + i32.const 4 + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=8 local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + call $~lib/set/Set#set:buckets local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 4 + i32.const 1 + i32.sub + call $~lib/set/Set#set:bucketsMask local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.const 0 + i32.const 4 + block $~lib/set/ENTRY_SIZE|inlined.0 (result i32) + i32.const 8 + br $~lib/set/ENTRY_SIZE|inlined.0 + end + i32.mul + call $~lib/arraybuffer/ArrayBuffer#constructor + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=8 local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + call $~lib/set/Set#set:entries local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 4 + call $~lib/set/Set#set:entriesCapacity local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.const 0 + call $~lib/set/Set#set:entriesOffset + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.const 0 + call $~lib/set/Set#set:entriesCount local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/set/Set#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/array/Array - block $~lib/set/Set - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/set/Set~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) - (func $~start - call $start:std/set - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33520 - i32.const 33568 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/set/Set#constructor (param $this i32) (result i32) - (local $1 i32) + (func $~lib/set/Set#find (param $this i32) (param $key i32) (param $hashCode i32) (result i32) + (local $entry i32) + (local $taggedNext i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 + i32.store local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/set/Set#get:buckets + local.get $hashCode local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 4 - i32.const 4 - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $~lib/set/Set#set:buckets - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - i32.const 1 - i32.sub - call $~lib/set/Set#set:bucketsMask - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - i32.const 4 - block $~lib/set/ENTRY_SIZE|inlined.0 (result i32) - i32.const 8 - br $~lib/set/ENTRY_SIZE|inlined.0 - end - i32.mul - call $~lib/arraybuffer/ArrayBuffer#constructor - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $~lib/set/Set#set:entries - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - call $~lib/set/Set#set:entriesCapacity - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - call $~lib/set/Set#set:entriesOffset - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - call $~lib/set/Set#set:entriesCount - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $~lib/set/Set#find (param $this i32) (param $key i32) (param $hashCode i32) (result i32) - (local $entry i32) - (local $taggedNext i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/set/Set#get:buckets - local.get $hashCode - local.get $this - local.set $5 + local.set $5 global.get $~lib/memory/__stack_pointer local.get $5 i32.store @@ -5403,7 +5068,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -5579,6 +5244,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -5619,7 +5288,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -5841,7 +5510,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -7256,7 +6925,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -7353,7 +7022,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -7575,7 +7244,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -8988,7 +8657,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -9085,7 +8754,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -9307,7 +8976,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10722,7 +10391,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -10819,7 +10488,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -11041,7 +10710,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -12452,7 +12121,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -12549,7 +12218,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -12771,7 +12440,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -14182,7 +13851,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -14279,7 +13948,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -14501,7 +14170,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -15912,7 +15581,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -16009,7 +15678,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -16232,7 +15901,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -17643,7 +17312,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -17740,7 +17409,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -17963,7 +17632,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -19374,7 +19043,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -19471,7 +19140,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -19694,7 +19363,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -21105,7 +20774,7 @@ if i32.const 432 i32.const 592 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -21202,7 +20871,7 @@ if i32.const 224 i32.const 592 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -21425,7 +21094,7 @@ if i32.const 224 i32.const 592 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -22097,60 +21766,470 @@ call $~lib/builtins/abort unreachable end - local.get $k|7 - f64.const 1 - f64.add - local.set $k|7 - br $for-loop|4 + local.get $k|7 + f64.const 1 + f64.add + local.set $k|7 + br $for-loop|4 + end + end + local.get $set + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/set/Set#get:size + i32.const 50 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 45 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $set + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/set/Set#clear + local.get $set + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/set/Set#get:size + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 49 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 432 + i32.const 480 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 432 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/set/Set~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/set/Set#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/array/Array + block $~lib/set/Set + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $~lib/set/Set $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/set/Set~visit + return end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return end - local.get $set - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - call $~lib/set/Set#get:size - i32.const 50 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 45 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $set - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - call $~lib/set/Set#clear - local.get $set - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - call $~lib/set/Set#get:size - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 49 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 20 - i32.add - global.set $~lib/memory/__stack_pointer + unreachable ) (func $~lib/set/Set#__visit (param $this i32) (param $cookie i32) (local $entries i32) @@ -22163,6 +22242,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22200,6 +22283,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22227,6 +22314,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22264,6 +22355,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22291,6 +22386,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22328,6 +22427,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22355,6 +22458,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22392,6 +22499,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22419,6 +22530,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22456,6 +22571,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22483,6 +22602,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22520,6 +22643,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22547,6 +22674,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22584,6 +22715,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22611,6 +22746,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22648,6 +22787,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22675,6 +22818,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22712,6 +22859,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22739,6 +22890,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $3 global.get $~lib/memory/__stack_pointer @@ -22776,6 +22931,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -22792,45 +22951,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) - (local $buffer i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - i32.const 1073741820 - i32.gt_u - if - i32.const 432 - i32.const 480 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $buffer - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) ) diff --git a/tests/compiler/std/set.release.wat b/tests/compiler/std/set.release.wat index e48a3d3f19..79448c50f3 100644 --- a/tests/compiler/std/set.release.wat +++ b/tests/compiler/std/set.release.wat @@ -7,8 +7,8 @@ (type $5 (func (param i32))) (type $6 (func (param i32 i64))) (type $7 (func (param i32 i32 i32) (result i32))) - (type $8 (func (param i32 i32 i32))) - (type $9 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32))) + (type $9 (func (param i32 i32 i32))) (type $10 (func (param i32 i64) (result i32))) (type $11 (func (param i32 f64))) (type $12 (func (param i32 f32))) @@ -21,7 +21,7 @@ (type $19 (func (param i32 f32 i32) (result i32))) (type $20 (func (param i32 i32) (result f64))) (type $21 (func (param i32 i32) (result f32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -55,6 +55,41 @@ (data $12 (i32.const 1648) "\18\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00H\08\00\00B\08\00\00H\00\00\00B\00\00\00\88\08\00\00\82\08\00\00\88\00\00\00\82\00\00\00\08\t\00\00\02\t\00\00\08\01\00\00\02\01\00\00\08\n\00\00\02\n\00\00\08\02\00\00\02\02\00\00\08\19\00\00\02\19\00\00\08\1a\00\00\02\1a") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1748 + i32.lt_s + if + i32.const 34544 + i32.const 34592 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/set/Set#get:size (param $0 i32) (result i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -1219,7 +1254,7 @@ select local.set $1 end - block $__inlined_func$~lib/rt/itcms/__renew$893 + block $__inlined_func$~lib/rt/itcms/__renew$888 local.get $4 i32.const 20 i32.sub @@ -1237,7 +1272,7 @@ i32.store offset=16 local.get $4 local.set $2 - br $__inlined_func$~lib/rt/itcms/__renew$893 + br $__inlined_func$~lib/rt/itcms/__renew$888 end local.get $1 local.get $3 @@ -4586,7 +4621,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$904 + block $__inlined_func$~lib/rt/itcms/Object#unlink$905 local.get $0 i32.load offset=4 i32.const -4 @@ -4610,7 +4645,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$904 + br $__inlined_func$~lib/rt/itcms/Object#unlink$905 end local.get $0 i32.load offset=8 @@ -4653,7 +4688,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -9494,7 +9529,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9542,7 +9577,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9591,7 +9626,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9640,7 +9675,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9729,7 +9764,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -9792,7 +9827,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9844,7 +9879,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -9910,7 +9945,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -9964,7 +9999,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10029,7 +10064,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10118,7 +10153,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10183,7 +10218,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10233,7 +10268,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10283,7 +10318,7 @@ if i32.const 1248 i32.const 1616 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -10466,7 +10501,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -10573,7 +10608,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -10722,7 +10757,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -10829,7 +10864,7 @@ if i32.const 1248 i32.const 1616 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -11126,7 +11161,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -11718,7 +11753,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -12308,7 +12343,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -12900,7 +12935,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -13492,7 +13527,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -14084,7 +14119,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -14674,7 +14709,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable @@ -15266,7 +15301,7 @@ if i32.const 1456 i32.const 1616 - i32.const 70 + i32.const 72 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/static-array.debug.wat b/tests/compiler/std/static-array.debug.wat index cfc3928c0c..9f70d469e4 100644 --- a/tests/compiler/std/static-array.debug.wat +++ b/tests/compiler/std/static-array.debug.wat @@ -14,7 +14,7 @@ (type $12 (func (param i32 i32 f32))) (type $13 (func (param i32 i32) (result f64))) (type $14 (func (param i32 i32 f64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/static-array/i i32 (i32.const 64)) (global $std/static-array/I i32 (i32.const 160)) (global $std/static-array/f i32 (i32.const 240)) @@ -22,6 +22,8 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -271,7 +273,7 @@ if i32.const 448 i32.const 800 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2444,155 +2446,6 @@ local.get $length_ i32.store offset=12 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/static-array/i - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/static-array/I - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/static-array/f - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/static-array/F - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 448 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 560 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 608 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - unreachable - ) (func $~start call $start:std/static-array ) @@ -2634,6 +2487,38 @@ local.get $1 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/array/Array#__get (param $this i32) (param $index i32) (result i32) (local $value i32) (local $3 i32) @@ -2657,7 +2542,7 @@ if i32.const 448 i32.const 512 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2791,6 +2676,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -2831,7 +2720,7 @@ if i32.const 448 i32.const 512 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -2923,7 +2812,7 @@ if i32.const 448 i32.const 512 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2978,7 +2867,7 @@ if i32.const 448 i32.const 512 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3070,7 +2959,7 @@ if i32.const 448 i32.const 512 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3125,7 +3014,7 @@ if i32.const 448 i32.const 512 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3217,7 +3106,7 @@ if i32.const 448 i32.const 512 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3272,7 +3161,7 @@ if i32.const 448 i32.const 512 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -3687,6 +3576,155 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/static-array/i + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/static-array/I + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/static-array/f + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/static-array/F + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 448 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 560 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 608 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + unreachable + ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -3697,6 +3735,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3723,6 +3765,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3749,6 +3795,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -3775,6 +3825,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this diff --git a/tests/compiler/std/static-array.release.wat b/tests/compiler/std/static-array.release.wat index 14b3ca07e7..2f00da0958 100644 --- a/tests/compiler/std/static-array.release.wat +++ b/tests/compiler/std/static-array.release.wat @@ -2,15 +2,15 @@ (type $0 (func)) (type $1 (func (param i32))) (type $2 (func (param i32 i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32) (result i32))) (type $5 (func (param i32) (result i64))) (type $6 (func (param i32) (result f64))) (type $7 (func (param i32) (result f32))) (type $8 (func (param i32 i32) (result i32))) (type $9 (func (param i32 i32 i64))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -59,6 +59,41 @@ (data $19 (i32.const 1952) "\08\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\02\t\00\00\02\n\00\00\02\19\00\00\02\1a") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1988 + i32.lt_s + if + i32.const 34784 + i32.const 34832 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -135,7 +170,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$145 + block $__inlined_func$~lib/rt/itcms/__renew$143 i32.const 1073741820 local.get $2 i32.const 1 @@ -173,7 +208,7 @@ i32.store offset=16 local.get $2 local.set $1 - br $__inlined_func$~lib/rt/itcms/__renew$145 + br $__inlined_func$~lib/rt/itcms/__renew$143 end local.get $4 i32.load offset=12 @@ -1010,7 +1045,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$155 + block $__inlined_func$~lib/rt/itcms/Object#unlink$156 local.get $0 i32.load offset=4 i32.const -4 @@ -1034,7 +1069,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$155 + br $__inlined_func$~lib/rt/itcms/Object#unlink$156 end local.get $0 i32.load offset=8 @@ -1077,7 +1112,7 @@ if i32.const 1472 i32.const 1824 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1204,7 +1239,7 @@ if i32.const 1472 i32.const 1536 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1253,7 +1288,7 @@ if i32.const 1472 i32.const 1536 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1303,7 +1338,7 @@ if i32.const 1472 i32.const 1536 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1353,7 +1388,7 @@ if i32.const 1472 i32.const 1536 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/staticarray.debug.wat b/tests/compiler/std/staticarray.debug.wat index fe1032fd29..ec057fb716 100644 --- a/tests/compiler/std/staticarray.debug.wat +++ b/tests/compiler/std/staticarray.debug.wat @@ -15,11 +15,13 @@ (type $13 (func (param i32 i32 i32 i32 i32 i32))) (type $14 (func (param i32 f64 i32) (result i32))) (type $15 (func (param i32 f32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/staticarray/arr1 i32 (i32.const 32)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $std/staticarray/arr2 i32 (i32.const 256)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -33,8 +35,8 @@ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $std/staticarray/arr3 (mut i32) (i32.const 0)) - (global $std/staticarray/arr4 (mut i32) (i32.const 0)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) + (global $std/staticarray/arr4 (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) @@ -333,7 +335,7 @@ if i32.const 64 i32.const 512 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2455,6 +2457,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -3360,345 +3366,181 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/staticarray/arr1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/staticarray/arr2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/staticarray/arr3 - local.tee $1 + (func $~start + call $start:std/staticarray + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 35728 + i32.const 35776 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable end - global.get $std/staticarray/arr4 - local.tee $1 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/staticarray/StaticArray#__get (param $this i32) (param $index i32) (result i32) + (local $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/staticarray/StaticArray#get:length + i32.ge_u if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 64 + i32.const 128 + i32.const 80 + i32.const 41 + call $~lib/builtins/abort + unreachable end - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 656 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1312 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 320 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.get $this + local.get $index + i32.const 2 + i32.shl + i32.add i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/staticarray/StaticArray#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - i32.const 1 + local.set $value + i32.const 0 drop + local.get $value + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/staticarray/StaticArray#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index local.get $this - local.set $cur - local.get $cur + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/staticarray/StaticArray#get:length + i32.ge_u + if + i32.const 64 + i32.const 128 + i32.const 95 + i32.const 41 + call $~lib/builtins/abort + unreachable + end local.get $this - i32.const 20 - i32.sub - call $~lib/rt/common/OBJECT#get:rtSize + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $index + local.get $value + call $~lib/staticarray/StaticArray#__uset + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end + global.set $~lib/memory/__stack_pointer ) - (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) - local.get $0 + (func $std/staticarray/Ref#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store offset=4 local.get $1 - call $~lib/staticarray/StaticArray#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + call $~lib/object/Object#constructor + local.tee $this + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit ) - (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - i32.const 1 - drop - local.get $this - local.set $cur - local.get $cur - local.get $this - i32.const 20 - i32.sub - call $~lib/rt/common/OBJECT#get:rtSize - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - ) - (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28i32%2Ci32%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> - block $~lib/staticarray/StaticArray - block $~lib/staticarray/StaticArray - block $~lib/array/Array<~lib/string/String> - block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $std/staticarray/Ref - block $~lib/staticarray/StaticArray - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit - return - end - unreachable - ) - (func $~start - call $start:std/staticarray - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 35728 - i32.const 35776 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/staticarray/StaticArray#__get (param $this i32) (param $index i32) (result i32) - (local $value i32) - (local $3 i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3707,138 +3549,14 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $index local.get $this - local.set $3 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $1 i32.store - local.get $3 - call $~lib/staticarray/StaticArray#get:length - i32.ge_u - if - i32.const 64 - i32.const 128 - i32.const 78 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.get $index - i32.const 2 - i32.shl - i32.add - i32.load - local.set $value - i32.const 0 - drop - local.get $value - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $~lib/staticarray/StaticArray#__set (param $this i32) (param $index i32) (param $value i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/staticarray/StaticArray#get:length - i32.ge_u - if - i32.const 64 - i32.const 128 - i32.const 93 - i32.const 41 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - local.get $index - local.get $value - call $~lib/staticarray/StaticArray#__uset - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $std/staticarray/Ref#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $~lib/object/Object#constructor - local.tee $this - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -3921,7 +3639,7 @@ if i32.const 64 i32.const 752 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -3996,7 +3714,7 @@ if i32.const 656 i32.const 128 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -4101,7 +3819,7 @@ if i32.const 656 i32.const 128 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -4151,6 +3869,10 @@ i32.add local.get $ref i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $ref i32.const 1 @@ -4187,6 +3909,10 @@ i32.add local.get $ref|14 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $ref|14 i32.const 1 @@ -4348,6 +4074,10 @@ i32.add local.get $ref i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $outStart local.get $ref i32.const 1 @@ -4432,7 +4162,7 @@ if i32.const 64 i32.const 128 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -4456,7 +4186,7 @@ if i32.const 1312 i32.const 128 - i32.const 82 + i32.const 84 i32.const 40 call $~lib/builtins/abort unreachable @@ -4642,7 +4372,7 @@ if i32.const 656 i32.const 128 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -4702,6 +4432,10 @@ i32.add local.get $ref i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $ref i32.const 1 @@ -4738,6 +4472,10 @@ i32.add local.get $ref|14 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $ref|14 i32.const 1 @@ -6228,6 +5966,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -9876,13 +9618,668 @@ call $~lib/builtins/abort unreachable end - global.get $~lib/memory/__heap_base - global.set $~lib/memory/__stack_pointer - call $~lib/rt/itcms/__collect - global.get $~lib/memory/__stack_pointer - i32.const 104 - i32.add - global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__heap_base + global.set $~lib/memory/__stack_pointer + call $~lib/rt/itcms/__collect + global.get $~lib/memory/__stack_pointer + i32.const 104 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/staticarray/StaticArray#constructor (param $this i32) (param $length i32) (result i32) + (local $outSize i32) + (local $out i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.const 2 + i32.shr_u + i32.gt_u + if + i32.const 656 + i32.const 128 + i32.const 53 + i32.const 60 + call $~lib/builtins/abort + unreachable + end + local.get $length + i32.const 2 + i32.shl + local.set $outSize + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $out + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + return + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer + i32.store offset=4 + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $2) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $2) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + i32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $2) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/staticarray/arr1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/staticarray/arr4 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 656 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1312 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 320 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/staticarray/StaticArray#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $cur + local.get $cur + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + ) + (func $~lib/staticarray/StaticArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $cur + local.get $cur + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> + block $~lib/staticarray/StaticArray + block $~lib/staticarray/StaticArray + block $~lib/array/Array<~lib/string/String> + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $std/staticarray/Ref + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + unreachable ) (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) @@ -9894,6 +10291,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 drop local.get $this @@ -9923,6 +10324,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 1 drop local.get $this @@ -9990,6 +10395,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -10014,6 +10423,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -10038,149 +10451,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - ) - (func $~lib/staticarray/StaticArray#constructor (param $this i32) (param $length i32) (result i32) - (local $outSize i32) - (local $out i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - i32.const 1073741820 - i32.const 2 - i32.shr_u - i32.gt_u - if - i32.const 656 - i32.const 128 - i32.const 51 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - local.get $length - i32.const 2 - i32.shl - local.set $outSize - global.get $~lib/memory/__stack_pointer - local.get $outSize - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $out - i32.store i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental + global.get $~lib/shared/runtime/Runtime.Memory i32.ne drop - local.get $out - local.set $4 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 - return ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -10189,238 +10479,50 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer - i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer + local.get $2 i32.store - local.get $array - local.get $buffer - i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $7 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $2) - i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $2) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - i32.load - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - i32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $2) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) ) diff --git a/tests/compiler/std/staticarray.release.wat b/tests/compiler/std/staticarray.release.wat index e9b6c8eccb..67afcc037b 100644 --- a/tests/compiler/std/staticarray.release.wat +++ b/tests/compiler/std/staticarray.release.wat @@ -4,14 +4,14 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32) (result i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32) (result i32))) + (type $8 (func (param i32 i32 i32 i32) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i32 i32 i32 i32))) (type $11 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -172,6 +172,41 @@ (elem $0 (i32.const 1) $start:std/staticarray~anonymous|0 $start:std/staticarray~anonymous|1 $start:std/staticarray~anonymous|2 $start:std/staticarray~anonymous|3 $start:std/staticarray~anonymous|3 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $start:std/staticarray~anonymous|7 $start:std/staticarray~anonymous|8 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $~lib/util/sort/COMPARATOR~anonymous|0) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3960 + i32.lt_s + if + i32.const 36752 + i32.const 36800 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -316,7 +351,7 @@ if i32.const 1088 i32.const 1152 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -469,7 +504,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$106 + block $__inlined_func$~lib/util/string/compareImpl$98 loop $while-continue|1 local.get $0 local.tee $3 @@ -489,7 +524,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$106 + br_if $__inlined_func$~lib/util/string/compareImpl$98 local.get $2 i32.const 2 i32.add @@ -744,7 +779,7 @@ if i32.const 1088 i32.const 1152 - i32.const 78 + i32.const 80 i32.const 41 call $~lib/builtins/abort unreachable @@ -763,7 +798,7 @@ if i32.const 2336 i32.const 1152 - i32.const 82 + i32.const 84 i32.const 40 call $~lib/builtins/abort unreachable @@ -803,7 +838,7 @@ if i32.const 1088 i32.const 1776 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -1218,7 +1253,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$275 + block $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$274 local.get $0 i32.const 20 i32.sub @@ -1238,7 +1273,7 @@ global.set $~lib/memory/__stack_pointer i32.const -1 local.set $2 - br $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$275 + br $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$274 end local.get $2 i32.const 0 @@ -1280,7 +1315,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$275 + br $__inlined_func$~lib/staticarray/StaticArray<~lib/string/String>#indexOf$274 end local.get $2 i32.const 1 @@ -1795,7 +1830,7 @@ if i32.const 1088 i32.const 1152 - i32.const 93 + i32.const 95 i32.const 41 call $~lib/builtins/abort unreachable @@ -2482,7 +2517,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$268 + block $__inlined_func$~lib/rt/itcms/Object#unlink$269 local.get $0 i32.load offset=4 i32.const -4 @@ -2506,7 +2541,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$268 + br $__inlined_func$~lib/rt/itcms/Object#unlink$269 end local.get $0 i32.load offset=8 @@ -2549,7 +2584,7 @@ if i32.const 1088 i32.const 1536 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3110,7 +3145,7 @@ if i32.const 1680 i32.const 1152 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -3652,7 +3687,7 @@ if i32.const 1680 i32.const 1152 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -4893,7 +4928,7 @@ global.get $~lib/memory/__stack_pointer local.get $10 i32.store - block $__inlined_func$~lib/rt/itcms/__renew$225 + block $__inlined_func$~lib/rt/itcms/__renew$216 i32.const 1073741820 local.get $1 i32.const 1 @@ -4936,7 +4971,7 @@ i32.store offset=16 local.get $1 local.set $2 - br $__inlined_func$~lib/rt/itcms/__renew$225 + br $__inlined_func$~lib/rt/itcms/__renew$216 end local.get $4 local.get $3 @@ -5730,7 +5765,7 @@ if i32.const 1680 i32.const 1152 - i32.const 178 + i32.const 184 i32.const 7 call $~lib/builtins/abort unreachable @@ -6435,7 +6470,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/staticarray/StaticArray#includes$277 (result i32) + block $__inlined_func$~lib/staticarray/StaticArray#includes$276 (result i32) local.get $0 i32.const 20 i32.sub @@ -6450,7 +6485,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$~lib/staticarray/StaticArray#includes$277 + br $__inlined_func$~lib/staticarray/StaticArray#includes$276 end loop $while-continue|0 local.get $1 @@ -6472,7 +6507,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 1 - br $__inlined_func$~lib/staticarray/StaticArray#includes$277 + br $__inlined_func$~lib/staticarray/StaticArray#includes$276 end local.get $2 i32.const 1 @@ -6522,7 +6557,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/staticarray/StaticArray#includes$278 (result i32) + block $__inlined_func$~lib/staticarray/StaticArray#includes$277 (result i32) local.get $0 i32.const 20 i32.sub @@ -6537,7 +6572,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 0 - br $__inlined_func$~lib/staticarray/StaticArray#includes$278 + br $__inlined_func$~lib/staticarray/StaticArray#includes$277 end loop $while-continue|030 local.get $1 @@ -6559,7 +6594,7 @@ i32.add global.set $~lib/memory/__stack_pointer i32.const 1 - br $__inlined_func$~lib/staticarray/StaticArray#includes$278 + br $__inlined_func$~lib/staticarray/StaticArray#includes$277 end local.get $2 i32.const 1 @@ -7565,7 +7600,7 @@ local.get $0 i32.const 3440 i32.load - call_indirect (type $5) + call_indirect (type $6) local.get $2 i32.const 1 i32.add @@ -7703,7 +7738,7 @@ local.get $0 i32.const 3504 i32.load - call_indirect (type $7) + call_indirect (type $8) local.set $2 local.get $1 i32.const 1 @@ -7784,7 +7819,7 @@ local.get $0 i32.const 3536 i32.load - call_indirect (type $7) + call_indirect (type $8) local.set $2 local.get $1 i32.const 1 diff --git a/tests/compiler/std/string-casemapping.debug.wat b/tests/compiler/std/string-casemapping.debug.wat index 5e412bc990..303dc0a7f9 100644 --- a/tests/compiler/std/string-casemapping.debug.wat +++ b/tests/compiler/std/string-casemapping.debug.wat @@ -6,21 +6,23 @@ (type $4 (func)) (type $5 (func (param i32 i32 i32))) (type $6 (func (param i64 i32) (result i32))) - (type $7 (func (param i32 i64 i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i64 i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) (type $11 (func (param i32 i32 i32 i32 i32) (result i32))) (type $12 (func (param i32 i32 f64 f64 f64 f64 f64))) (type $13 (func (param i64) (result i32))) (type $14 (func (param i32 i64 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "string_casemapping" "toLowerCaseFromIndex" (func $std/string-casemapping/toLowerCaseFromIndex (param i32 i32) (result i32))) (import "string_casemapping" "toUpperCaseFromIndex" (func $std/string-casemapping/toUpperCaseFromIndex (param i32 i32) (result i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -419,7 +421,7 @@ if i32.const 256 i32.const 320 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3411,68 +3413,6 @@ call $~lib/util/number/itoa64 return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 256 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 64 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 18608 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 19664 - local.get $0 - call $~lib/rt/itcms/__visit - global.get $~lib/util/casemap/SPECIALS_UPPER - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/staticarray/StaticArray - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:std/string-casemapping ) @@ -3489,6 +3429,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String#toUpperCase (param $this i32) (result i32) (local $len i32) (local $codes i32) @@ -6706,7 +6678,7 @@ if i32.const 0 i32.const 14576 - i32.const 39 + i32.const 40 i32.const 7 call $~lib/builtins/abort unreachable @@ -6968,4 +6940,66 @@ local.get $18 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 256 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 64 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 18608 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 19664 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $~lib/util/casemap/SPECIALS_UPPER + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/staticarray/StaticArray + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/std/string-casemapping.release.wat b/tests/compiler/std/string-casemapping.release.wat index dc43d6fcf3..3d5b161756 100644 --- a/tests/compiler/std/string-casemapping.release.wat +++ b/tests/compiler/std/string-casemapping.release.wat @@ -2,18 +2,18 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (param i32) (result i32))) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 f64 f64 f64 f64 f64))) (type $7 (func (param i64) (result i32))) (type $8 (func (param i32 i32 i32))) (type $9 (func (param i32 i32 i64))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (import "string_casemapping" "toUpperCaseFromIndex" (func $std/string-casemapping/toUpperCaseFromIndex (param i32 i32) (result i32))) (import "string_casemapping" "toLowerCaseFromIndex" (func $std/string-casemapping/toLowerCaseFromIndex (param i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -482,6 +482,41 @@ (data $178 (i32.const 21056) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\a4") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 21080 + i32.lt_s + if + i32.const 53872 + i32.const 53920 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -1575,7 +1610,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$143 + block $__inlined_func$~lib/rt/itcms/Object#unlink$144 local.get $1 i32.load offset=4 i32.const -4 @@ -1599,7 +1634,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$143 + br $__inlined_func$~lib/rt/itcms/Object#unlink$144 end local.get $1 i32.load offset=8 @@ -1642,7 +1677,7 @@ if i32.const 1280 i32.const 1344 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2414,7 +2449,7 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store - block $__inlined_func$~lib/string/String#concat$148 + block $__inlined_func$~lib/string/String#concat$149 local.get $1 i32.const 20 i32.sub @@ -2433,7 +2468,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1056 local.set $0 - br $__inlined_func$~lib/string/String#concat$148 + br $__inlined_func$~lib/string/String#concat$149 end global.get $~lib/memory/__stack_pointer local.get $0 @@ -2510,7 +2545,7 @@ if i32.const 0 i32.const 15600 - i32.const 39 + i32.const 40 i32.const 7 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/string-casemapping.ts b/tests/compiler/std/string-casemapping.ts index 34b7848075..d979cf030f 100644 --- a/tests/compiler/std/string-casemapping.ts +++ b/tests/compiler/std/string-casemapping.ts @@ -117,12 +117,12 @@ for (let i = 0; i <= 0x10FFFF; i++) { let origUpper = source.toUpperCase(); let code1: i64, code2: i64; - // collect all code points for lower case on AssemblyScript side + // collect all code points for lower case on ToilScript side let origLowerCode = origLower.codePointAt(0); if ((code1 = origLower.codePointAt(1)) >= 0) origLowerCode += code1 << 16; if ((code2 = origLower.codePointAt(2)) >= 0) origLowerCode += code2 << 32; - // collect all code points for upper case on AssemblyScript side + // collect all code points for upper case on ToilScript side let origUpperCode = origUpper.codePointAt(0); if ((code1 = origUpper.codePointAt(1)) >= 0) origUpperCode += code1 << 16; if ((code2 = origUpper.codePointAt(2)) >= 0) origUpperCode += code2 << 32; diff --git a/tests/compiler/std/string-encoding.debug.wat b/tests/compiler/std/string-encoding.debug.wat index eb35cd9489..777a26d25f 100644 --- a/tests/compiler/std/string-encoding.debug.wat +++ b/tests/compiler/std/string-encoding.debug.wat @@ -5,16 +5,18 @@ (type $3 (func (param i32))) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/string-encoding/str (mut i32) (i32.const 32)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -258,7 +260,7 @@ if i32.const 320 i32.const 384 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2698,7 +2700,7 @@ if i32.const 688 i32.const 752 - i32.const 742 + i32.const 745 i32.const 49 call $~lib/builtins/abort unreachable @@ -2897,62 +2899,6 @@ call $std/string-encoding/testRoundtrip call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/string-encoding/str - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 320 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 128 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 688 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - unreachable - ) (func $~start call $start:std/string-encoding ) @@ -2969,6 +2915,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $std/string-encoding/testUTF16Length (local $0 i32) global.get $~lib/memory/__stack_pointer @@ -5033,7 +5011,7 @@ if i32.const 0 i32.const 752 - i32.const 770 + i32.const 773 i32.const 7 call $~lib/builtins/abort unreachable @@ -5231,4 +5209,60 @@ local.get $12 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/string-encoding/str + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 320 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 128 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 688 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/std/string-encoding.release.wat b/tests/compiler/std/string-encoding.release.wat index fb72c04a38..b009381e48 100644 --- a/tests/compiler/std/string-encoding.release.wat +++ b/tests/compiler/std/string-encoding.release.wat @@ -2,13 +2,13 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func)) (type $2 (func (param i32))) - (type $3 (func (param i32 i32 i32) (result i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32) (result i32))) + (type $5 (func (param i32) (result i32))) + (type $6 (func (param i32 i32))) (type $7 (func (result i32))) (type $8 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -71,6 +71,41 @@ (data $26 (i32.const 22784) "\04\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 22804 + i32.lt_s + if + i32.const 55600 + i32.const 55648 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -268,7 +303,7 @@ if i32.const 0 i32.const 1776 - i32.const 770 + i32.const 773 i32.const 7 call $~lib/builtins/abort unreachable @@ -729,7 +764,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$158 + block $__inlined_func$~lib/rt/itcms/Object#unlink$159 local.get $1 i32.load offset=4 i32.const -4 @@ -753,7 +788,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$158 + br $__inlined_func$~lib/rt/itcms/Object#unlink$159 end local.get $1 i32.load offset=8 @@ -796,7 +831,7 @@ if i32.const 1344 i32.const 1408 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1029,7 +1064,7 @@ if i32.const 1712 i32.const 1776 - i32.const 742 + i32.const 745 i32.const 49 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/string-nonnull.debug.wat b/tests/compiler/std/string-nonnull.debug.wat index 9e74fc89e8..b73d9deeac 100644 --- a/tests/compiler/std/string-nonnull.debug.wat +++ b/tests/compiler/std/string-nonnull.debug.wat @@ -1,17 +1,19 @@ (module (type $0 (func (param i32) (result i32))) (type $1 (func)) - (type $2 (func (param i32 i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32) (result i32))) + (type $4 (func (param i32 i32 i32 i32 i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 44)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32812)) (global $~lib/memory/__heap_base i32 (i32.const 32812)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (table $0 1 1 funcref) @@ -435,4 +437,36 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/string-nonnull.release.wat b/tests/compiler/std/string-nonnull.release.wat index b26fd35230..8a31a2675a 100644 --- a/tests/compiler/std/string-nonnull.release.wat +++ b/tests/compiler/std/string-nonnull.release.wat @@ -1,30 +1,51 @@ (module (type $0 (func)) - (type $1 (func (param i32 i32 i32 i32))) - (type $2 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (result i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33836)) (memory $0 1) (data $0 (i32.const 1036) "\1c") (data $0.1 (i32.const 1048) "\02") (export "memory" (memory $0)) (start $~start) - (func $~lib/string/String.__eq - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer + (func $~stack_check global.get $~lib/memory/__stack_pointer i32.const 1068 i32.lt_s if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33856 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33904 + i32.store offset=4 i32.const 33856 i32.const 33904 i32.const 1 i32.const 1 - call $~lib/builtins/abort + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer unreachable end + ) + (func $~lib/string/String.__eq + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store @@ -39,17 +60,7 @@ i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1068 - i32.lt_s - if - i32.const 33856 - i32.const 33904 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store @@ -73,113 +84,98 @@ i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer - block $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 1068 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - call $~lib/string/String.__ne - if - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - i32.const 1052 - i32.load - drop - end - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - call $~lib/string/String.__ne - if - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - i32.const 1052 - i32.load - drop - end + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + call $~lib/string/String.__ne + if global.get $~lib/memory/__stack_pointer i32.const 1056 i32.store offset=4 i32.const 1052 i32.load drop - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - call $~lib/string/String.__eq + end + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + call $~lib/string/String.__ne + if global.get $~lib/memory/__stack_pointer i32.const 1056 i32.store offset=4 i32.const 1052 i32.load drop - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - call $~lib/string/String.__eq + end + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + i32.const 1052 + i32.load + drop + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + call $~lib/string/String.__eq + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + i32.const 1052 + i32.load + drop + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + call $~lib/string/String.__eq + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + i32.const 1052 + i32.load + drop + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1056 + i32.store + i32.const 1052 + i32.load + i32.const 1 + i32.shr_u + i32.eqz + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.eqz + if global.get $~lib/memory/__stack_pointer i32.const 1056 i32.store offset=4 i32.const 1052 i32.load drop - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 1068 - i32.lt_s - br_if $folding-inner0 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store - i32.const 1052 - i32.load - i32.const 1 - i32.shr_u - i32.eqz - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 1056 - i32.store offset=4 - i32.const 1052 - i32.load - drop - end - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - return end - i32.const 33856 - i32.const 33904 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer ) ) diff --git a/tests/compiler/std/string.debug.wat b/tests/compiler/std/string.debug.wat index 738795005a..2e61020b78 100644 --- a/tests/compiler/std/string.debug.wat +++ b/tests/compiler/std/string.debug.wat @@ -25,12 +25,14 @@ (type $23 (func (param i32 i32 i32 i32) (result i32))) (type $24 (func (param f64) (result i32))) (type $25 (func (param f32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/string/str (mut i32) (i32.const 32)) (global $std/string/nullStr (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -44,6 +46,7 @@ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~lib/string/String.MAX_LENGTH i32 (i32.const 536870910)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/util/string/__fixmulShift (mut i64) (i64.const 0)) @@ -55,7 +58,6 @@ (global $~lib/builtins/f64.MIN_VALUE f64 (f64.const 5e-324)) (global $std/string/Ox1p_1073 f64 (f64.const 1e-323)) (global $std/string/Ox1_0000000000001p_1022 f64 (f64.const 2.225073858507202e-308)) - (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~lib/builtins/i8.MIN_VALUE i32 (i32.const -128)) (global $~lib/builtins/i16.MIN_VALUE i32 (i32.const -32768)) (global $~lib/builtins/i32.MIN_VALUE i32 (i32.const -2147483648)) @@ -856,7 +858,7 @@ if i32.const 240 i32.const 544 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -5515,114 +5517,6 @@ global.get $std/string/str return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/string/str - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/string/nullStr - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 240 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 13040 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 14688 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 352 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 15616 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 16672 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/array/Array<~lib/string/String> - block $~lib/array/Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array<~lib/string/String> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/string/String>~visit - return - end - unreachable - ) (func $~start call $start:std/string ) @@ -5639,6 +5533,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -5919,7 +5845,7 @@ if i32.const 240 i32.const 304 - i32.const 57 + i32.const 58 i32.const 31 call $~lib/builtins/abort unreachable @@ -10173,7 +10099,7 @@ if i32.const 13040 i32.const 304 - i32.const 334 + i32.const 335 i32.const 7 call $~lib/builtins/abort unreachable @@ -11431,6 +11357,10 @@ local.get $array local.get $newData i32.store offset=4 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $newData i32.const 0 @@ -11471,7 +11401,7 @@ if i32.const 240 i32.const 14640 - i32.const 130 + i32.const 132 i32.const 22 call $~lib/builtins/abort unreachable @@ -11509,6 +11439,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -11562,6 +11496,10 @@ i32.add local.get $value i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -11748,6 +11686,10 @@ i32.add local.get $charStr i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $result local.get $charStr i32.const 1 @@ -12085,7 +12027,7 @@ if i32.const 240 i32.const 14640 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -12115,7 +12057,7 @@ if i32.const 14688 i32.const 14640 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -24035,102 +23977,6 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - (local $5 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 1 - drop - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:dataStart - local.set $cur - local.get $cur - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:length_ - i32.const 2 - i32.shl - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - local.get $this - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - local.get $5 - call $~lib/array/Array<~lib/string/String>#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) (func $~lib/string/String.fromCharCode (param $unit i32) (param $surr i32) (result i32) (local $hasSur i32) (local $out i32) @@ -24204,6 +24050,10 @@ local.get $array local.get $buffer i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $array local.get $buffer i32.const 0 @@ -24266,7 +24116,7 @@ if i32.const 0 i32.const 304 - i32.const 39 + i32.const 40 i32.const 7 call $~lib/builtins/abort unreachable @@ -25274,4 +25124,216 @@ local.get $5 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/string/str + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/string/nullStr + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 240 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 13040 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 14688 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 352 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 15616 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 16672 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array<~lib/string/String>#get:buffer (param $this i32) (result i32) + local.get $this + i32.load + ) + (func $~lib/array/Array<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/array/Array<~lib/string/String> + block $~lib/array/Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/array/Array $~lib/array/Array<~lib/string/String> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/string/String>~visit + return + end + unreachable + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:dataStart + local.set $cur + local.get $cur + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:length_ + i32.const 2 + i32.shl + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + local.get $this + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + call $~lib/array/Array<~lib/string/String>#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/std/string.release.wat b/tests/compiler/std/string.release.wat index ed9cf71122..002d04bcc2 100644 --- a/tests/compiler/std/string.release.wat +++ b/tests/compiler/std/string.release.wat @@ -6,11 +6,11 @@ (type $4 (func)) (type $5 (func (param i32))) (type $6 (func (result i32))) - (type $7 (func (param i32) (result f64))) - (type $8 (func (param i64 i32) (result i32))) - (type $9 (func (param i32 i32) (result f64))) - (type $10 (func (param i32 i32 i32))) - (type $11 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32) (result f64))) + (type $9 (func (param i64 i32) (result i32))) + (type $10 (func (param i32 i32) (result f64))) + (type $11 (func (param i32 i32 i32))) (type $12 (func (param f64) (result i32))) (type $13 (func (param i32 i32 i32 i32) (result i32))) (type $14 (func (param i32 i64 i32 i32))) @@ -21,7 +21,7 @@ (type $19 (func (param i32 i32 i64))) (type $20 (func (param f64 i32) (result f64))) (type $21 (func (param i64 i64 i32 i64 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $std/string/str (mut i32) (i32.const 1056)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -984,6 +984,41 @@ (export "getString" (func $std/string/getString)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 26636 + i32.lt_s + if + i32.const 59424 + i32.const 59472 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -1349,7 +1384,7 @@ local.get $0 local.set $2 global.get $~lib/memory/__stack_pointer - block $__inlined_func$~lib/util/number/ulog_base$180 (result i32) + block $__inlined_func$~lib/util/number/ulog_base$176 (result i32) local.get $1 i32.popcnt i32.const 1 @@ -1367,7 +1402,7 @@ i32.div_u i32.const 1 i32.add - br $__inlined_func$~lib/util/number/ulog_base$180 + br $__inlined_func$~lib/util/number/ulog_base$176 end local.get $1 i64.extend_i32_s @@ -1690,7 +1725,7 @@ i64.extend_i32_u local.set $4 global.get $~lib/memory/__stack_pointer - block $__inlined_func$~lib/util/number/ulog_base$175 (result i32) + block $__inlined_func$~lib/util/number/ulog_base$171 (result i32) local.get $1 i32.popcnt i32.const 1 @@ -1708,7 +1743,7 @@ i32.div_u i32.const 1 i32.add - br $__inlined_func$~lib/util/number/ulog_base$175 + br $__inlined_func$~lib/util/number/ulog_base$171 end local.get $1 i64.extend_i32_s @@ -2151,7 +2186,7 @@ if i32.const 1264 i32.const 15664 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -2174,7 +2209,7 @@ if i32.const 15712 i32.const 15664 - i32.const 118 + i32.const 120 i32.const 40 call $~lib/builtins/abort unreachable @@ -2392,7 +2427,7 @@ i64.extend_i32_u local.set $5 global.get $~lib/memory/__stack_pointer - block $__inlined_func$~lib/util/number/ulog_base$171 (result i32) + block $__inlined_func$~lib/util/number/ulog_base$167 (result i32) local.get $1 i32.popcnt i32.const 1 @@ -2410,7 +2445,7 @@ i32.div_u i32.const 1 i32.add - br $__inlined_func$~lib/util/number/ulog_base$171 + br $__inlined_func$~lib/util/number/ulog_base$167 end local.get $1 i64.extend_i32_s @@ -3169,7 +3204,7 @@ local.get $0 local.set $2 global.get $~lib/memory/__stack_pointer - block $__inlined_func$~lib/util/number/ulog_base$185 (result i32) + block $__inlined_func$~lib/util/number/ulog_base$181 (result i32) local.get $1 i32.popcnt i32.const 1 @@ -3187,7 +3222,7 @@ i32.div_u i32.const 1 i32.add - br $__inlined_func$~lib/util/number/ulog_base$185 + br $__inlined_func$~lib/util/number/ulog_base$181 end local.get $1 i64.extend_i32_s @@ -3973,7 +4008,7 @@ if i32.const 14064 i32.const 1328 - i32.const 334 + i32.const 335 i32.const 7 call $~lib/builtins/abort unreachable @@ -5395,7 +5430,7 @@ if i32.const 0 i32.const 1328 - i32.const 39 + i32.const 40 i32.const 7 call $~lib/builtins/abort unreachable @@ -8475,7 +8510,7 @@ if i32.const 1264 i32.const 1328 - i32.const 57 + i32.const 58 i32.const 31 call $~lib/builtins/abort unreachable @@ -8912,7 +8947,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$287 + block $__inlined_func$~lib/rt/itcms/Object#unlink$288 local.get $0 i32.load offset=4 i32.const -4 @@ -8936,7 +8971,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$287 + br $__inlined_func$~lib/rt/itcms/Object#unlink$288 end local.get $0 i32.load offset=8 @@ -8979,7 +9014,7 @@ if i32.const 1264 i32.const 1568 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -11855,7 +11890,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.store - block $__inlined_func$~lib/string/String#charCodeAt$294 + block $__inlined_func$~lib/string/String#charCodeAt$293 local.get $0 i32.const 20 i32.sub @@ -11870,7 +11905,7 @@ global.set $~lib/memory/__stack_pointer i32.const -1 local.set $0 - br $__inlined_func$~lib/string/String#charCodeAt$294 + br $__inlined_func$~lib/string/String#charCodeAt$293 end local.get $0 i32.load16_u @@ -11909,7 +11944,7 @@ global.get $~lib/memory/__stack_pointer local.get $4 i32.store - block $__inlined_func$~lib/string/String#codePointAt$295 + block $__inlined_func$~lib/string/String#codePointAt$294 local.get $4 i32.const 20 i32.sub @@ -11926,7 +11961,7 @@ global.set $~lib/memory/__stack_pointer i32.const -1 local.set $0 - br $__inlined_func$~lib/string/String#codePointAt$295 + br $__inlined_func$~lib/string/String#codePointAt$294 end local.get $0 i32.const 2 @@ -11944,7 +11979,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/string/String#codePointAt$295 + br $__inlined_func$~lib/string/String#codePointAt$294 end local.get $4 i32.load16_u offset=4 @@ -11958,7 +11993,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/string/String#codePointAt$295 + br $__inlined_func$~lib/string/String#codePointAt$294 end global.get $~lib/memory/__stack_pointer i32.const 4 @@ -12419,7 +12454,7 @@ global.get $~lib/memory/__stack_pointer i32.const 2176 i32.store - block $__inlined_func$~lib/string/String#startsWith$296 + block $__inlined_func$~lib/string/String#startsWith$295 local.get $4 i32.const 2172 i32.load @@ -12434,7 +12469,7 @@ global.set $~lib/memory/__stack_pointer i32.const 0 local.set $0 - br $__inlined_func$~lib/string/String#startsWith$296 + br $__inlined_func$~lib/string/String#startsWith$295 end global.get $~lib/memory/__stack_pointer local.get $0 @@ -12511,7 +12546,7 @@ global.get $~lib/memory/__stack_pointer i32.const 2208 i32.store - block $__inlined_func$~lib/string/String#endsWith$297 + block $__inlined_func$~lib/string/String#endsWith$296 i32.const 536870910 local.get $4 local.get $4 @@ -12534,7 +12569,7 @@ global.set $~lib/memory/__stack_pointer i32.const 0 local.set $0 - br $__inlined_func$~lib/string/String#endsWith$297 + br $__inlined_func$~lib/string/String#endsWith$296 end global.get $~lib/memory/__stack_pointer local.get $0 diff --git a/tests/compiler/std/symbol.debug.wat b/tests/compiler/std/symbol.debug.wat index 561a3a4b9a..c2d15da79b 100644 --- a/tests/compiler/std/symbol.debug.wat +++ b/tests/compiler/std/symbol.debug.wat @@ -10,10 +10,15 @@ (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) + (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) + (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/symbol/nextId (mut i32) (i32.const 12)) (global $std/symbol/sym1 (mut i32) (i32.const 0)) (global $std/symbol/sym2 (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -22,9 +27,6 @@ (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) - (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) - (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) - (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -287,7 +289,7 @@ if i32.const 304 i32.const 368 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2738,128 +2740,6 @@ local.get $taggedNext i32.store offset=8 ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $~lib/symbol/stringToId - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $~lib/symbol/idToString - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/symbol/key1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/symbol/key2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/symbol/key3 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/symbol/key4 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 304 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 512 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 624 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 112 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $"~lib/map/Map<~lib/string/String,usize>~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map<~lib/string/String,usize>#__visit" - ) - (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $"~lib/map/Map#__visit" - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $"~lib/map/Map" - block $"~lib/map/Map<~lib/string/String,usize>" - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"~lib/map/Map<~lib/string/String,usize>" $"~lib/map/Map" $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map<~lib/string/String,usize>~visit" - return - end - local.get $0 - local.get $1 - call $"~lib/map/Map~visit" - return - end - unreachable - ) (func $~start global.get $~started if @@ -2882,6 +2762,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $"~lib/map/Map<~lib/string/String,usize>#constructor" (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3541,7 +3453,7 @@ if i32.const 624 i32.const 688 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -3926,6 +3838,10 @@ call $"~lib/map/MapEntry<~lib/string/String,usize>#set:key" i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $key i32.const 1 @@ -4418,6 +4334,10 @@ call $"~lib/map/MapEntry#set:value" i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -4538,6 +4458,10 @@ call $"~lib/map/MapEntry#set:value" i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -4750,7 +4674,7 @@ if i32.const 624 i32.const 688 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -5385,6 +5309,169 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u + if + i32.const 512 + i32.const 560 + i32.const 52 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $~lib/symbol/stringToId + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/symbol/idToString + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/symbol/key1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/symbol/key2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/symbol/key3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/symbol/key4 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 304 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 512 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 624 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 112 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $"~lib/map/Map<~lib/string/String,usize>~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map<~lib/string/String,usize>#__visit" + ) + (func $"~lib/map/Map~visit" (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $"~lib/map/Map#__visit" + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $"~lib/map/Map" + block $"~lib/map/Map<~lib/string/String,usize>" + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $"~lib/map/Map<~lib/string/String,usize>" $"~lib/map/Map" $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map<~lib/string/String,usize>~visit" + return + end + local.get $0 + local.get $1 + call $"~lib/map/Map~visit" + return + end + unreachable + ) (func $"~lib/map/Map<~lib/string/String,usize>#__visit" (param $this i32) (param $cookie i32) (local $entries i32) (local $cur i32) @@ -5400,6 +5487,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $7 global.get $~lib/memory/__stack_pointer @@ -5495,6 +5586,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $7 global.get $~lib/memory/__stack_pointer @@ -5575,45 +5670,4 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) - (local $buffer i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $length - i32.const 1073741820 - i32.gt_u - if - i32.const 512 - i32.const 560 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $buffer - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) ) diff --git a/tests/compiler/std/symbol.release.wat b/tests/compiler/std/symbol.release.wat index ea31cd7f43..a2a3674eb7 100644 --- a/tests/compiler/std/symbol.release.wat +++ b/tests/compiler/std/symbol.release.wat @@ -4,12 +4,12 @@ (type $2 (func (param i32 i32))) (type $3 (func)) (type $4 (func (param i32))) - (type $5 (func (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (result i32))) (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/symbol/nextId (mut i32) (i32.const 12)) (global $std/symbol/sym1 (mut i32) (i32.const 0)) (global $std/symbol/sym2 (mut i32) (i32.const 0)) @@ -98,6 +98,41 @@ (data $33 (i32.const 2720) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\10\01\82\00\10A\02") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 2748 + i32.lt_s + if + i32.const 35536 + i32.const 35584 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -294,7 +329,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$88 + block $__inlined_func$~lib/util/string/compareImpl$84 loop $while-continue|1 local.get $0 local.tee $3 @@ -314,7 +349,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$88 + br_if $__inlined_func$~lib/util/string/compareImpl$84 local.get $2 i32.const 2 i32.add @@ -1543,7 +1578,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$246 + block $__inlined_func$~lib/rt/itcms/Object#unlink$247 local.get $0 i32.load offset=4 i32.const -4 @@ -1567,7 +1602,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$246 + br $__inlined_func$~lib/rt/itcms/Object#unlink$247 end local.get $0 i32.load offset=8 @@ -1610,7 +1645,7 @@ if i32.const 1328 i32.const 1392 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2064,7 +2099,7 @@ if i32.const 1648 i32.const 1712 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable @@ -2170,7 +2205,7 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store - block $__inlined_func$~lib/string/String#concat$253 + block $__inlined_func$~lib/string/String#concat$252 local.get $1 i32.const 20 i32.sub @@ -2189,7 +2224,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1888 local.set $0 - br $__inlined_func$~lib/string/String#concat$253 + br $__inlined_func$~lib/string/String#concat$252 end global.get $~lib/memory/__stack_pointer local.get $0 @@ -2751,7 +2786,7 @@ if i32.const 1648 i32.const 1712 - i32.const 105 + i32.const 106 i32.const 17 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/typedarray.debug.wat b/tests/compiler/std/typedarray.debug.wat index c2e2f9861b..53919e5f81 100644 --- a/tests/compiler/std/typedarray.debug.wat +++ b/tests/compiler/std/typedarray.debug.wat @@ -28,17 +28,17 @@ (type $26 (func (param i64 i32 i32))) (type $27 (func (param i32 f32 i32) (result i32))) (type $28 (func (param i64 i32) (result i32))) - (type $29 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $30 (func (param f32 i32 i32) (result f32))) - (type $31 (func (param f64 i32 i32) (result f64))) - (type $32 (func (param i32 i64 i32))) - (type $33 (func (param i32 i64) (result i32))) - (type $34 (func (param i32 i32 i64))) - (type $35 (func (param i32 i32 f32) (result f32))) - (type $36 (func (param i32 i32 f64) (result f64))) - (type $37 (func (param f32 i32 i32))) - (type $38 (func (param f64 i32 i32))) - (type $39 (func (param i32 i32 i32 i32))) + (type $29 (func (param i32 i32 i32 i32))) + (type $30 (func (param i32 i32 i32 i32 i32) (result i32))) + (type $31 (func (param f32 i32 i32) (result f32))) + (type $32 (func (param f64 i32 i32) (result f64))) + (type $33 (func (param i32 i64 i32))) + (type $34 (func (param i32 i64) (result i32))) + (type $35 (func (param i32 i32 i64))) + (type $36 (func (param i32 i32 f32) (result f32))) + (type $37 (func (param i32 i32 f64) (result f64))) + (type $38 (func (param f32 i32 i32))) + (type $39 (func (param f64 i32 i32))) (type $40 (func (param i32 i32 i64) (result i32))) (type $41 (func (result i32))) (type $42 (func (param f32 f32) (result f32))) @@ -54,7 +54,7 @@ (type $52 (func (param i32 i32 f32))) (type $53 (func (param f32) (result i32))) (type $54 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (global $~lib/typedarray/Int8Array.BYTES_PER_ELEMENT i32 (i32.const 1)) (global $~lib/typedarray/Uint8Array.BYTES_PER_ELEMENT i32 (i32.const 1)) @@ -70,6 +70,8 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -599,7 +601,7 @@ if i32.const 336 i32.const 400 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -11534,2280 +11536,928 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/typedarray/forEachValues - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/typedarray/testArrayReverseValues - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/typedarray/testArrayWrapValues - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $std/typedarray/setSource1 - local.tee $1 + (func $~start + call $start:std/typedarray + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 48096 + i32.const 48144 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable end - global.get $std/typedarray/setSource2 - local.tee $1 + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) + (local $buffer i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $this + i32.eqz if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $this + i32.store end - global.get $std/typedarray/setSource3 - local.tee $1 + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $length + i32.const 1073741820 + local.get $alignLog2 + i32.shr_u + i32.gt_u if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + i32.const 32 + i32.const 80 + i32.const 19 + i32.const 57 + call $~lib/builtins/abort + unreachable end - global.get $std/typedarray/setSource7 - local.tee $1 + global.get $~lib/memory/__stack_pointer + local.get $length + local.get $alignLog2 + i32.shl + local.tee $length + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store offset=8 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=12 + local.get $4 + call $~lib/arraybuffer/ArrayBufferView#set:buffer + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $buffer + call $~lib/arraybuffer/ArrayBufferView#set:dataStart + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $length + call $~lib/arraybuffer/ArrayBufferView#set:byteLength + local.get $this + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/typedarray/Int8Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $this + i32.store end - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 144 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 7408 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 8464 - local.get $0 - call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load + (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + i32.sub + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + return ) - (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) - local.get $0 + (func $~lib/typedarray/Int8Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + return ) - (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + (func $~lib/typedarray/Uint8Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) - local.get $0 + (func $~lib/typedarray/Uint8Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - ) - (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit + return ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 0 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store local.get $1 - call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit - ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit + return ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Int16Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit - ) - (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit - ) - (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 1 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit + return ) - (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint16Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit - ) - (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 8 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit - ) - (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 1 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint16Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit - ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit + return ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Int32Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 9 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Int32Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit + return ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint32Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit - ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint32Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit - ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit + return ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Int64Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 11 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 + (func $~lib/typedarray/Int64Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/object/Object~visit - local.get $0 + i32.store local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit - ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit + return ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#get:_env (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 12 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#get:_env (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Uint64Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit - ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit + return ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#get:_env (param $this i32) (result i32) + (func $~lib/typedarray/Float32Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 13 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 2 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) - local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 2 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit + return ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/typedarray/Float64Array#constructor (param $this i32) (param $length i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 14 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + global.get $~lib/memory/__stack_pointer local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $length + i32.const 3 + call $~lib/arraybuffer/ArrayBufferView#constructor + local.tee $this + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/array/Array#__visit + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/array/Array#get:buffer (param $this i32) (result i32) + (func $~lib/typedarray/Float64Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $this - i32.load - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer local.get $1 - call $~lib/array/Array#__visit - ) - (func $~lib/function/Function<%28i8%2Ci8%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i8%2Ci8%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 + i32.store local.get $1 - call $~lib/object/Object~visit - local.get $0 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.shr_u + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer local.get $1 - call $~lib/function/Function<%28i8%2Ci8%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u8%2Cu8%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u8%2Cu8%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i16%2Ci16%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i16%2Ci16%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci16%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u16%2Cu16%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u16%2Cu16%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Cu16%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit - ) - (func $~lib/function/Function<%28i64%2Ci64%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28i64%2Ci64%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci64%29=>i32>#__visit - ) - (func $~lib/function/Function<%28u64%2Cu64%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28u64%2Cu64%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Cu64%29=>i32>#__visit - ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/function/Function<%28f32%2Cf32%29=>i32> - block $~lib/function/Function<%28u64%2Cu64%29=>i32> - block $~lib/function/Function<%28i64%2Ci64%29=>i32> - block $~lib/function/Function<%28u32%2Cu32%29=>i32> - block $~lib/function/Function<%28i32%2Ci32%29=>i32> - block $~lib/function/Function<%28u16%2Cu16%29=>i32> - block $~lib/function/Function<%28i16%2Ci16%29=>i32> - block $~lib/function/Function<%28u8%2Cu8%29=>i32> - block $~lib/function/Function<%28i8%2Ci8%29=>i32> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/array/Array - block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> - block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> - block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> - block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> - block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> - block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> - block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> - block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> - block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> - block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> - block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> - block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> - block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> - block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> - block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> - block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> - block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> - block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> - block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> - block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> - block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> - block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> - block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> - block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> - block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> - block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> - block $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> - block $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> - block $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> - block $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> - block $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> - block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> - block $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> - block $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> - block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> - block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> - block $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/function/Function<%28f64%2Cf64%29=>i32> - block $~lib/typedarray/Float64Array - block $~lib/typedarray/Float32Array - block $~lib/typedarray/Uint64Array - block $~lib/typedarray/Int64Array - block $~lib/typedarray/Uint32Array - block $~lib/typedarray/Int32Array - block $~lib/typedarray/Uint16Array - block $~lib/typedarray/Int16Array - block $~lib/typedarray/Uint8ClampedArray - block $~lib/typedarray/Uint8Array - block $~lib/typedarray/Int8Array - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i8%2Ci8%29=>i32> $~lib/function/Function<%28u8%2Cu8%29=>i32> $~lib/function/Function<%28i16%2Ci16%29=>i32> $~lib/function/Function<%28u16%2Cu16%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28u32%2Cu32%29=>i32> $~lib/function/Function<%28i64%2Ci64%29=>i32> $~lib/function/Function<%28u64%2Cu64%29=>i32> $~lib/function/Function<%28f32%2Cf32%29=>i32> $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint8ClampedArray~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint16Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Int64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Uint64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float32Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/typedarray/Float64Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/array/Array~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i8%2Ci8%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u8%2Cu8%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i16%2Ci16%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u16%2Cu16%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28i64%2Ci64%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28u64%2Cu64%29=>i32>~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit - return - end - unreachable - ) - (func $~start - call $start:std/typedarray - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 48096 - i32.const 48144 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) - (func $~lib/arraybuffer/ArrayBufferView#constructor (param $this i32) (param $length i32) (param $alignLog2 i32) (result i32) - (local $buffer i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $length - i32.const 1073741820 - local.get $alignLog2 - i32.shr_u - i32.gt_u - if - i32.const 32 - i32.const 80 - i32.const 19 - i32.const 57 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $length - local.get $alignLog2 - i32.shl - local.tee $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer - i32.store offset=8 - i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental - i32.ne - drop - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=12 - local.get $4 - call $~lib/arraybuffer/ArrayBufferView#set:buffer - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $buffer - call $~lib/arraybuffer/ArrayBufferView#set:dataStart - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store offset=4 - local.get $4 - local.get $length - call $~lib/arraybuffer/ArrayBufferView#set:byteLength - local.get $this - local.set $4 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) - (func $~lib/typedarray/Int8Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 4 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - i32.sub - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int8Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint8Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 5 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Uint8Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint8ClampedArray#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 6 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 0 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Uint8ClampedArray#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int16Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 7 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 1 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Int16Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint16Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 8 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 1 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Uint16Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int32Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 9 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Int32Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint32Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 10 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Uint32Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int64Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 11 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Int64Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint64Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 12 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Uint64Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Float32Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 13 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 2 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Float32Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 2 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Float64Array#constructor (param $this i32) (param $length i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 14 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - global.get $~lib/memory/__stack_pointer - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $length - i32.const 3 - call $~lib/arraybuffer/ArrayBufferView#constructor - local.tee $this - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $~lib/typedarray/Float64Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.shr_u - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return + return ) (func $std/typedarray/testInstantiate (param $len i32) (local $i8a i32) @@ -14542,7 +13192,7 @@ if i32.const 336 i32.const 608 - i32.const 747 + i32.const 748 i32.const 64 call $~lib/builtins/abort unreachable @@ -14589,7 +13239,7 @@ if i32.const 336 i32.const 608 - i32.const 736 + i32.const 737 i32.const 64 call $~lib/builtins/abort unreachable @@ -14736,6 +13386,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -14795,7 +13449,7 @@ if i32.const 336 i32.const 608 - i32.const 1457 + i32.const 1458 i32.const 64 call $~lib/builtins/abort unreachable @@ -14940,6 +13594,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -15571,7 +14229,7 @@ if i32.const 336 i32.const 608 - i32.const 1446 + i32.const 1447 i32.const 64 call $~lib/builtins/abort unreachable @@ -15618,7 +14276,7 @@ if i32.const 336 i32.const 608 - i32.const 320 + i32.const 321 i32.const 45 call $~lib/builtins/abort unreachable @@ -15673,7 +14331,7 @@ if i32.const 336 i32.const 608 - i32.const 309 + i32.const 310 i32.const 45 call $~lib/builtins/abort unreachable @@ -15718,7 +14376,7 @@ if i32.const 336 i32.const 608 - i32.const 36 + i32.const 37 i32.const 45 call $~lib/builtins/abort unreachable @@ -15823,7 +14481,7 @@ if i32.const 336 i32.const 608 - i32.const 25 + i32.const 26 i32.const 45 call $~lib/builtins/abort unreachable @@ -15869,7 +14527,7 @@ if i32.const 336 i32.const 736 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -16159,6 +14817,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -16279,7 +14941,7 @@ if i32.const 336 i32.const 736 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -17057,7 +15719,7 @@ if i32.const 336 i32.const 608 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -17458,231 +16120,231 @@ if i32.const 336 i32.const 608 - i32.const 463 - i32.const 64 - call $~lib/builtins/abort - unreachable - end - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index - i32.const 1 - i32.shl - i32.add - local.get $value - i32.store16 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Int16Array#reduce (param $this i32) (param $fn i32) (param $initialValue i32) (result i32) - (local $array i32) - (local $fn|4 i32) - (local $initialValue|5 i32) - (local $ptr i32) - (local $i i32) - (local $k i32) - (local $9 i32) - (local $10 i32) - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - block $"~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $array - i32.store - global.get $~lib/memory/__stack_pointer - local.get $fn - local.tee $fn|4 - i32.store offset=4 - local.get $initialValue - local.set $initialValue|5 - local.get $array - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=8 - local.get $10 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $ptr - i32.const 0 - local.set $i - local.get $array - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=8 - local.get $10 - call $~lib/typedarray/Int16Array#get:length - local.set $k - loop $for-loop|0 - local.get $i - local.get $k - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.get $fn|4 - local.tee $9 - i32.store offset=12 - local.get $initialValue|5 - local.get $ptr - local.get $i - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.get $i - local.get $array - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=8 - local.get $10 - i32.const 4 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $6) - local.set $initialValue|5 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - local.get $initialValue|5 - br $"~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16>|inlined.0" - end - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - ) - (func $"std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>" - (local $array i32) - (local $result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Int16Array#constructor - local.tee $array - i32.store - local.get $array - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.const 1 - call $~lib/typedarray/Int16Array#__set - local.get $array - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Int16Array#__set - local.get $array - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 2 - i32.const 3 - call $~lib/typedarray/Int16Array#__set - local.get $array - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1968 - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - local.get $2 - i32.const 0 - call $~lib/typedarray/Int16Array#reduce - local.set $result - local.get $result - i32.extend16_s - i32.const 6 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 323 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint16Array#__set (param $this i32) (param $index i32) (param $value i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $index - local.get $this - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 1 - i32.shr_u - i32.ge_u - if - i32.const 336 - i32.const 608 - i32.const 605 + i32.const 464 + i32.const 64 + call $~lib/builtins/abort + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.const 1 + i32.shl + i32.add + local.get $value + i32.store16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Int16Array#reduce (param $this i32) (param $fn i32) (param $initialValue i32) (result i32) + (local $array i32) + (local $fn|4 i32) + (local $initialValue|5 i32) + (local $ptr i32) + (local $i i32) + (local $k i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + block $"~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $array + i32.store + global.get $~lib/memory/__stack_pointer + local.get $fn + local.tee $fn|4 + i32.store offset=4 + local.get $initialValue + local.set $initialValue|5 + local.get $array + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=8 + local.get $10 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $ptr + i32.const 0 + local.set $i + local.get $array + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=8 + local.get $10 + call $~lib/typedarray/Int16Array#get:length + local.set $k + loop $for-loop|0 + local.get $i + local.get $k + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $fn|4 + local.tee $9 + i32.store offset=12 + local.get $initialValue|5 + local.get $ptr + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.get $i + local.get $array + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=8 + local.get $10 + i32.const 4 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $6) + local.set $initialValue|5 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $initialValue|5 + br $"~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16>|inlined.0" + end + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $"std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>" + (local $array i32) + (local $result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int16Array#constructor + local.tee $array + i32.store + local.get $array + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Int16Array#__set + local.get $array + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int16Array#__set + local.get $array + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Int16Array#__set + local.get $array + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1968 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + i32.const 0 + call $~lib/typedarray/Int16Array#reduce + local.set $result + local.get $result + i32.extend16_s + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 323 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Uint16Array#__set (param $this i32) (param $index i32) (param $value i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $index + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.shr_u + i32.ge_u + if + i32.const 336 + i32.const 608 + i32.const 606 i32.const 64 call $~lib/builtins/abort unreachable @@ -18083,7 +16745,7 @@ if i32.const 336 i32.const 608 - i32.const 889 + i32.const 890 i32.const 64 call $~lib/builtins/abort unreachable @@ -18306,7 +16968,7 @@ if i32.const 336 i32.const 608 - i32.const 1031 + i32.const 1032 i32.const 64 call $~lib/builtins/abort unreachable @@ -18530,7 +17192,7 @@ if i32.const 336 i32.const 608 - i32.const 1173 + i32.const 1174 i32.const 64 call $~lib/builtins/abort unreachable @@ -18754,7 +17416,7 @@ if i32.const 336 i32.const 608 - i32.const 1315 + i32.const 1316 i32.const 64 call $~lib/builtins/abort unreachable @@ -19165,7 +17827,7 @@ if i32.const 336 i32.const 608 - i32.const 48 + i32.const 49 i32.const 33 call $~lib/builtins/abort unreachable @@ -19328,7 +17990,7 @@ if i32.const 336 i32.const 608 - i32.const 190 + i32.const 191 i32.const 33 call $~lib/builtins/abort unreachable @@ -19491,7 +18153,7 @@ if i32.const 336 i32.const 608 - i32.const 332 + i32.const 333 i32.const 33 call $~lib/builtins/abort unreachable @@ -19656,7 +18318,7 @@ if i32.const 336 i32.const 608 - i32.const 475 + i32.const 476 i32.const 33 call $~lib/builtins/abort unreachable @@ -19823,7 +18485,7 @@ if i32.const 336 i32.const 608 - i32.const 617 + i32.const 618 i32.const 33 call $~lib/builtins/abort unreachable @@ -19990,7 +18652,7 @@ if i32.const 336 i32.const 608 - i32.const 759 + i32.const 760 i32.const 33 call $~lib/builtins/abort unreachable @@ -20157,7 +18819,7 @@ if i32.const 336 i32.const 608 - i32.const 901 + i32.const 902 i32.const 33 call $~lib/builtins/abort unreachable @@ -20325,7 +18987,7 @@ if i32.const 336 i32.const 608 - i32.const 1043 + i32.const 1044 i32.const 33 call $~lib/builtins/abort unreachable @@ -20493,7 +19155,7 @@ if i32.const 336 i32.const 608 - i32.const 1185 + i32.const 1186 i32.const 33 call $~lib/builtins/abort unreachable @@ -20661,7 +19323,7 @@ if i32.const 336 i32.const 608 - i32.const 1327 + i32.const 1328 i32.const 33 call $~lib/builtins/abort unreachable @@ -20829,7 +19491,7 @@ if i32.const 336 i32.const 608 - i32.const 1469 + i32.const 1470 i32.const 33 call $~lib/builtins/abort unreachable @@ -23003,6 +21665,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -23256,6 +21922,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -23299,7 +21969,7 @@ if i32.const 336 i32.const 608 - i32.const 167 + i32.const 168 i32.const 45 call $~lib/builtins/abort unreachable @@ -23554,6 +22224,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -23807,6 +22481,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -23852,7 +22530,7 @@ if i32.const 336 i32.const 608 - i32.const 452 + i32.const 453 i32.const 64 call $~lib/builtins/abort unreachable @@ -24109,6 +22787,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -24154,7 +22836,7 @@ if i32.const 336 i32.const 608 - i32.const 594 + i32.const 595 i32.const 64 call $~lib/builtins/abort unreachable @@ -24411,6 +23093,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -24664,6 +23350,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -24709,7 +23399,7 @@ if i32.const 336 i32.const 608 - i32.const 878 + i32.const 879 i32.const 64 call $~lib/builtins/abort unreachable @@ -24966,6 +23656,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -25012,7 +23706,7 @@ if i32.const 336 i32.const 608 - i32.const 1020 + i32.const 1021 i32.const 64 call $~lib/builtins/abort unreachable @@ -25269,6 +23963,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -25315,7 +24013,7 @@ if i32.const 336 i32.const 608 - i32.const 1162 + i32.const 1163 i32.const 64 call $~lib/builtins/abort unreachable @@ -25560,7 +24258,7 @@ global.set $~argumentsLength local.get $10 i32.load - call_indirect (type $30) + call_indirect (type $31) f32.store local.get $i i32.const 1 @@ -25572,6 +24270,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -25618,7 +24320,7 @@ if i32.const 336 i32.const 608 - i32.const 1304 + i32.const 1305 i32.const 64 call $~lib/builtins/abort unreachable @@ -25863,7 +24565,7 @@ global.set $~argumentsLength local.get $10 i32.load - call_indirect (type $31) + call_indirect (type $32) f64.store local.get $i i32.const 1 @@ -25875,6 +24577,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -26145,6 +24851,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -26469,6 +25179,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -26793,6 +25507,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -27117,6 +25835,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -27441,6 +26163,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -27765,6 +26491,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -28089,6 +26819,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -28413,6 +27147,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -28737,6 +27475,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -29061,6 +27803,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -29385,6 +28131,10 @@ local.get $out local.get $data i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $data i32.const 0 @@ -40874,7 +39624,7 @@ global.set $~argumentsLength local.get $7 i32.load - call_indirect (type $37) + call_indirect (type $38) local.get $i i32.const 1 i32.add @@ -41129,7 +39879,7 @@ global.set $~argumentsLength local.get $7 i32.load - call_indirect (type $38) + call_indirect (type $39) local.get $i i32.const 1 i32.add @@ -41270,7 +40020,283 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Int8Array#get:length + call $~lib/util/bytes/REVERSE + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>" + (local $values i32) + (local $length i32) + (local $array i32) + (local $arrayWithOffset i32) + (local $i i32) + (local $i|5 i32) + (local $reversedSlice i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $std/typedarray/testArrayReverseValues + local.tee $values + i32.store + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $length + call $~lib/typedarray/Int8Array#constructor + local.tee $array + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $length + call $~lib/typedarray/Int8Array#constructor + local.tee $arrayWithOffset + i32.store offset=12 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.extend8_s + call $~lib/typedarray/Int8Array#__set + local.get $arrayWithOffset + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.extend8_s + call $~lib/typedarray/Int8Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/typedarray/Int8Array#reverse + drop + i32.const 0 + local.set $i|5 + loop $for-loop|1 + local.get $i|5 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|5 + call $~lib/typedarray/Int8Array#__get + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $length + i32.const 1 + i32.sub + local.get $i|5 + i32.sub + call $~lib/array/Array#__get + i32.extend8_s + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 570 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|5 + i32.const 1 + i32.add + local.set $i|5 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $arrayWithOffset + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + i32.const 4 + i32.const 8 + call $~lib/typedarray/Int8Array#subarray + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/typedarray/Int8Array#reverse + local.tee $reversedSlice + i32.store offset=20 + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/typedarray/Int8Array#__get + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 575 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/typedarray/Int8Array#__get + i32.const 7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 576 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 2 + call $~lib/typedarray/Int8Array#__get + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 577 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 3 + call $~lib/typedarray/Int8Array#__get + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 578 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Uint8Array#reverse (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/typedarray/Uint8Array#get:length call $~lib/util/bytes/REVERSE local.get $this local.set $1 @@ -41281,7 +40307,168 @@ local.get $1 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>" + (func $~lib/typedarray/Uint8Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (local $array i32) + (local $begin|4 i32) + (local $end|5 i32) + (local $len i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $out i32) + (local $buf i32) + (local $19 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $array + i32.store + local.get $begin + local.set $begin|4 + local.get $end + local.set $end|5 + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/typedarray/Uint8Array#get:length + local.set $len + local.get $begin|4 + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $begin|4 + i32.add + local.tee $7 + i32.const 0 + local.tee $8 + local.get $7 + local.get $8 + i32.gt_s + select + else + local.get $begin|4 + local.tee $9 + local.get $len + local.tee $10 + local.get $9 + local.get $10 + i32.lt_s + select + end + local.set $begin|4 + local.get $end|5 + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end|5 + i32.add + local.tee $11 + i32.const 0 + local.tee $12 + local.get $11 + local.get $12 + i32.gt_s + select + else + local.get $end|5 + local.tee $13 + local.get $len + local.tee $14 + local.get $13 + local.get $14 + i32.lt_s + select + end + local.set $end|5 + local.get $end|5 + local.tee $15 + local.get $begin|4 + local.tee $16 + local.get $15 + local.get $16 + i32.gt_s + select + local.set $end|5 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $buf + local.get $out + local.get $buf + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buf + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $begin|4 + i32.const 0 + i32.shl + i32.add + i32.store offset=4 + local.get $out + local.get $end|5 + local.get $begin|4 + i32.sub + i32.const 0 + i32.shl + i32.store offset=8 + local.get $out + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>|inlined.0" + end + local.set $19 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $19 + return + ) + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>" (local $values i32) (local $length i32) (local $array i32) @@ -41314,13 +40501,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Uint8Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Uint8Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -41345,8 +40532,9 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend8_s - call $~lib/typedarray/Int8Array#__set + i32.const 255 + i32.and + call $~lib/typedarray/Uint8Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -41362,8 +40550,9 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend8_s - call $~lib/typedarray/Int8Array#__set + i32.const 255 + i32.and + call $~lib/typedarray/Uint8Array#__set local.get $i i32.const 1 i32.add @@ -41377,7 +40566,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int8Array#reverse + call $~lib/typedarray/Uint8Array#reverse drop i32.const 0 local.set $i|5 @@ -41393,7 +40582,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint8Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -41406,7 +40595,8 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i32.extend8_s + i32.const 255 + i32.and i32.eq i32.eqz if @@ -41433,13 +40623,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Int8Array#subarray + call $~lib/typedarray/Uint8Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int8Array#reverse + call $~lib/typedarray/Uint8Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -41449,7 +40639,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint8Array#__get i32.const 8 i32.eq i32.eqz @@ -41468,7 +40658,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint8Array#__get i32.const 7 i32.eq i32.eqz @@ -41487,7 +40677,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint8Array#__get i32.const 6 i32.eq i32.eqz @@ -41506,7 +40696,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint8Array#__get i32.const 5 i32.eq i32.eqz @@ -41523,7 +40713,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -41546,7 +40736,7 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length call $~lib/util/bytes/REVERSE local.get $this local.set $1 @@ -41557,9 +40747,9 @@ local.get $1 return ) - (func $~lib/typedarray/Uint8Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#subarray (param $this i32) (param $start i32) (param $end i32) (result i32) (local $array i32) - (local $begin|4 i32) + (local $begin i32) (local $end|5 i32) (local $len i32) (local $7 i32) @@ -41586,13 +40776,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array i32.store - local.get $begin - local.set $begin|4 + local.get $start + local.set $begin local.get $end local.set $end|5 local.get $array @@ -41601,14 +40791,14 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length local.set $len - local.get $begin|4 + local.get $begin i32.const 0 i32.lt_s if (result i32) local.get $len - local.get $begin|4 + local.get $begin i32.add local.tee $7 i32.const 0 @@ -41618,7 +40808,7 @@ i32.gt_s select else - local.get $begin|4 + local.get $begin local.tee $9 local.get $len local.tee $10 @@ -41627,7 +40817,7 @@ i32.lt_s select end - local.set $begin|4 + local.set $begin local.get $end|5 i32.const 0 i32.lt_s @@ -41655,7 +40845,7 @@ local.set $end|5 local.get $end|5 local.tee $15 - local.get $begin|4 + local.get $begin local.tee $16 local.get $15 local.get $16 @@ -41664,7 +40854,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -41679,6 +40869,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -41691,20 +40885,20 @@ i32.store offset=4 local.get $19 call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $begin|4 + local.get $begin i32.const 0 i32.shl i32.add i32.store offset=4 local.get $out local.get $end|5 - local.get $begin|4 + local.get $begin i32.sub i32.const 0 i32.shl i32.store offset=8 local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.set $19 global.get $~lib/memory/__stack_pointer @@ -41714,7 +40908,7 @@ local.get $19 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>" (local $values i32) (local $length i32) (local $array i32) @@ -41747,13 +40941,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8Array#constructor + call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8Array#constructor + call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -41780,7 +40974,7 @@ call $~lib/array/Array#__get i32.const 255 i32.and - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint8ClampedArray#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -41798,7 +40992,7 @@ call $~lib/array/Array#__get i32.const 255 i32.and - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint8ClampedArray#__set local.get $i i32.const 1 i32.add @@ -41812,7 +41006,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint8Array#reverse + call $~lib/typedarray/Uint8ClampedArray#reverse drop i32.const 0 local.set $i|5 @@ -41828,7 +41022,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Uint8ClampedArray#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -41869,13 +41063,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Uint8Array#subarray + call $~lib/typedarray/Uint8ClampedArray#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint8Array#reverse + call $~lib/typedarray/Uint8ClampedArray#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -41885,7 +41079,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 8 i32.eq i32.eqz @@ -41904,7 +41098,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 7 i32.eq i32.eqz @@ -41923,7 +41117,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 6 i32.eq i32.eqz @@ -41942,7 +41136,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 5 i32.eq i32.eqz @@ -41959,7 +41153,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Int16Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -41982,8 +41176,8 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Uint8ClampedArray#get:length - call $~lib/util/bytes/REVERSE + call $~lib/typedarray/Int16Array#get:length + call $~lib/util/bytes/REVERSE local.get $this local.set $1 global.get $~lib/memory/__stack_pointer @@ -41993,9 +41187,9 @@ local.get $1 return ) - (func $~lib/typedarray/Uint8ClampedArray#subarray (param $this i32) (param $start i32) (param $end i32) (result i32) + (func $~lib/typedarray/Int16Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $array i32) - (local $begin i32) + (local $begin|4 i32) (local $end|5 i32) (local $len i32) (local $7 i32) @@ -42022,13 +41216,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array i32.store - local.get $start - local.set $begin + local.get $begin + local.set $begin|4 local.get $end local.set $end|5 local.get $array @@ -42037,14 +41231,14 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length local.set $len - local.get $begin + local.get $begin|4 i32.const 0 i32.lt_s if (result i32) local.get $len - local.get $begin + local.get $begin|4 i32.add local.tee $7 i32.const 0 @@ -42054,7 +41248,7 @@ i32.gt_s select else - local.get $begin + local.get $begin|4 local.tee $9 local.get $len local.tee $10 @@ -42063,7 +41257,7 @@ i32.lt_s select end - local.set $begin + local.set $begin|4 local.get $end|5 i32.const 0 i32.lt_s @@ -42091,7 +41285,7 @@ local.set $end|5 local.get $end|5 local.tee $15 - local.get $begin + local.get $begin|4 local.tee $16 local.get $15 local.get $16 @@ -42100,7 +41294,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 6 + i32.const 7 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -42115,6 +41309,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -42127,20 +41325,20 @@ i32.store offset=4 local.get $19 call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $begin - i32.const 0 + local.get $begin|4 + i32.const 1 i32.shl i32.add i32.store offset=4 local.get $out local.get $end|5 - local.get $begin + local.get $begin|4 i32.sub - i32.const 0 + i32.const 1 i32.shl i32.store offset=8 local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>|inlined.0" end local.set $19 global.get $~lib/memory/__stack_pointer @@ -42150,7 +41348,7 @@ local.get $19 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>" (local $values i32) (local $length i32) (local $array i32) @@ -42183,13 +41381,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int16Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int16Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -42214,9 +41412,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 255 - i32.and - call $~lib/typedarray/Uint8ClampedArray#__set + i32.extend16_s + call $~lib/typedarray/Int16Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -42232,9 +41429,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 255 - i32.and - call $~lib/typedarray/Uint8ClampedArray#__set + i32.extend16_s + call $~lib/typedarray/Int16Array#__set local.get $i i32.const 1 i32.add @@ -42248,7 +41444,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint8ClampedArray#reverse + call $~lib/typedarray/Int16Array#reverse drop i32.const 0 local.set $i|5 @@ -42264,7 +41460,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int16Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -42277,8 +41473,7 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i32.const 255 - i32.and + i32.extend16_s i32.eq i32.eqz if @@ -42305,13 +41500,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Uint8ClampedArray#subarray + call $~lib/typedarray/Int16Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint8ClampedArray#reverse + call $~lib/typedarray/Int16Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -42321,7 +41516,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int16Array#__get i32.const 8 i32.eq i32.eqz @@ -42340,7 +41535,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int16Array#__get i32.const 7 i32.eq i32.eqz @@ -42359,7 +41554,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int16Array#__get i32.const 6 i32.eq i32.eqz @@ -42378,7 +41573,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int16Array#__get i32.const 5 i32.eq i32.eqz @@ -42395,7 +41590,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Uint16Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -42418,7 +41613,7 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length call $~lib/util/bytes/REVERSE local.get $this local.set $1 @@ -42429,7 +41624,7 @@ local.get $1 return ) - (func $~lib/typedarray/Int16Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Uint16Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $array i32) (local $begin|4 i32) (local $end|5 i32) @@ -42458,7 +41653,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -42473,7 +41668,7 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.set $len local.get $begin|4 i32.const 0 @@ -42536,7 +41731,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 7 + i32.const 8 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -42551,6 +41746,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -42576,7 +41775,7 @@ i32.shl i32.store offset=8 local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.set $19 global.get $~lib/memory/__stack_pointer @@ -42586,7 +41785,7 @@ local.get $19 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>" (local $values i32) (local $length i32) (local $array i32) @@ -42619,13 +41818,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -42650,8 +41849,9 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend16_s - call $~lib/typedarray/Int16Array#__set + i32.const 65535 + i32.and + call $~lib/typedarray/Uint16Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -42667,8 +41867,9 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend16_s - call $~lib/typedarray/Int16Array#__set + i32.const 65535 + i32.and + call $~lib/typedarray/Uint16Array#__set local.get $i i32.const 1 i32.add @@ -42682,7 +41883,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int16Array#reverse + call $~lib/typedarray/Uint16Array#reverse drop i32.const 0 local.set $i|5 @@ -42698,7 +41899,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint16Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -42711,7 +41912,8 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i32.extend16_s + i32.const 65535 + i32.and i32.eq i32.eqz if @@ -42738,13 +41940,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Int16Array#subarray + call $~lib/typedarray/Uint16Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int16Array#reverse + call $~lib/typedarray/Uint16Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -42754,7 +41956,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 8 i32.eq i32.eqz @@ -42773,7 +41975,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 7 i32.eq i32.eqz @@ -42792,7 +41994,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 6 i32.eq i32.eqz @@ -42811,7 +42013,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 5 i32.eq i32.eqz @@ -42828,7 +42030,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Int32Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -42851,8 +42053,8 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Uint16Array#get:length - call $~lib/util/bytes/REVERSE + call $~lib/typedarray/Int32Array#get:length + call $~lib/util/bytes/REVERSE local.get $this local.set $1 global.get $~lib/memory/__stack_pointer @@ -42862,164 +42064,7 @@ local.get $1 return ) - (func $~lib/typedarray/Uint16Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) - (local $array i32) - (local $begin|4 i32) - (local $end|5 i32) - (local $len i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $out i32) - (local $buf i32) - (local $19 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $array - i32.store - local.get $begin - local.set $begin|4 - local.get $end - local.set $end|5 - local.get $array - local.set $19 - global.get $~lib/memory/__stack_pointer - local.get $19 - i32.store offset=4 - local.get $19 - call $~lib/typedarray/Uint16Array#get:length - local.set $len - local.get $begin|4 - i32.const 0 - i32.lt_s - if (result i32) - local.get $len - local.get $begin|4 - i32.add - local.tee $7 - i32.const 0 - local.tee $8 - local.get $7 - local.get $8 - i32.gt_s - select - else - local.get $begin|4 - local.tee $9 - local.get $len - local.tee $10 - local.get $9 - local.get $10 - i32.lt_s - select - end - local.set $begin|4 - local.get $end|5 - i32.const 0 - i32.lt_s - if (result i32) - local.get $len - local.get $end|5 - i32.add - local.tee $11 - i32.const 0 - local.tee $12 - local.get $11 - local.get $12 - i32.gt_s - select - else - local.get $end|5 - local.tee $13 - local.get $len - local.tee $14 - local.get $13 - local.get $14 - i32.lt_s - select - end - local.set $end|5 - local.get $end|5 - local.tee $15 - local.get $begin|4 - local.tee $16 - local.get $15 - local.get $16 - i32.gt_s - select - local.set $end|5 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 8 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 - local.get $array - local.set $19 - global.get $~lib/memory/__stack_pointer - local.get $19 - i32.store offset=4 - local.get $19 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $buf - local.get $out - local.get $buf - i32.store - local.get $out - local.get $buf - i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $array - local.set $19 - global.get $~lib/memory/__stack_pointer - local.get $19 - i32.store offset=4 - local.get $19 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $begin|4 - i32.const 1 - i32.shl - i32.add - i32.store offset=4 - local.get $out - local.get $end|5 - local.get $begin|4 - i32.sub - i32.const 1 - i32.shl - i32.store offset=8 - local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>|inlined.0" - end - local.set $19 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $19 - return - ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>" (local $values i32) (local $length i32) (local $array i32) @@ -43052,13 +42097,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -43083,9 +42128,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 65535 - i32.and - call $~lib/typedarray/Uint16Array#__set + call $~lib/typedarray/Int32Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -43101,9 +42144,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 65535 - i32.and - call $~lib/typedarray/Uint16Array#__set + call $~lib/typedarray/Int32Array#__set local.get $i i32.const 1 i32.add @@ -43117,7 +42158,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint16Array#reverse + call $~lib/typedarray/Int32Array#reverse drop i32.const 0 local.set $i|5 @@ -43133,7 +42174,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Int32Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -43146,8 +42187,6 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i32.const 65535 - i32.and i32.eq i32.eqz if @@ -43174,13 +42213,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Uint16Array#subarray + call $~lib/typedarray/Int32Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint16Array#reverse + call $~lib/typedarray/Int32Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -43190,7 +42229,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Int32Array#__get i32.const 8 i32.eq i32.eqz @@ -43209,7 +42248,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Int32Array#__get i32.const 7 i32.eq i32.eqz @@ -43228,7 +42267,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Int32Array#__get i32.const 6 i32.eq i32.eqz @@ -43247,7 +42286,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Int32Array#__get i32.const 5 i32.eq i32.eqz @@ -43264,7 +42303,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Uint32Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -43287,7 +42326,7 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length call $~lib/util/bytes/REVERSE local.get $this local.set $1 @@ -43298,7 +42337,168 @@ local.get $1 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>" + (func $~lib/typedarray/Uint32Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (local $array i32) + (local $begin|4 i32) + (local $end|5 i32) + (local $len i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $out i32) + (local $buf i32) + (local $19 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $array + i32.store + local.get $begin + local.set $begin|4 + local.get $end + local.set $end|5 + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/typedarray/Uint32Array#get:length + local.set $len + local.get $begin|4 + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $begin|4 + i32.add + local.tee $7 + i32.const 0 + local.tee $8 + local.get $7 + local.get $8 + i32.gt_s + select + else + local.get $begin|4 + local.tee $9 + local.get $len + local.tee $10 + local.get $9 + local.get $10 + i32.lt_s + select + end + local.set $begin|4 + local.get $end|5 + i32.const 0 + i32.lt_s + if (result i32) + local.get $len + local.get $end|5 + i32.add + local.tee $11 + i32.const 0 + local.tee $12 + local.get $11 + local.get $12 + i32.gt_s + select + else + local.get $end|5 + local.tee $13 + local.get $len + local.tee $14 + local.get $13 + local.get $14 + i32.lt_s + select + end + local.set $end|5 + local.get $end|5 + local.tee $15 + local.get $begin|4 + local.tee $16 + local.get $15 + local.get $16 + i32.gt_s + select + local.set $end|5 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 10 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $buf + local.get $out + local.get $buf + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buf + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $begin|4 + i32.const 2 + i32.shl + i32.add + i32.store offset=4 + local.get $out + local.get $end|5 + local.get $begin|4 + i32.sub + i32.const 2 + i32.shl + i32.store offset=8 + local.get $out + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>|inlined.0" + end + local.set $19 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $19 + return + ) + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>" (local $values i32) (local $length i32) (local $array i32) @@ -43331,13 +42531,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -43362,7 +42562,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Int32Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -43378,7 +42578,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Int32Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $i i32.const 1 i32.add @@ -43392,7 +42592,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int32Array#reverse + call $~lib/typedarray/Uint32Array#reverse drop i32.const 0 local.set $i|5 @@ -43408,7 +42608,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Uint32Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -43447,13 +42647,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Int32Array#subarray + call $~lib/typedarray/Uint32Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int32Array#reverse + call $~lib/typedarray/Uint32Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -43463,7 +42663,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 8 i32.eq i32.eqz @@ -43482,7 +42682,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 7 i32.eq i32.eqz @@ -43501,7 +42701,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 6 i32.eq i32.eqz @@ -43520,7 +42720,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 5 i32.eq i32.eqz @@ -43537,7 +42737,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Int64Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -43560,8 +42760,8 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Uint32Array#get:length - call $~lib/util/bytes/REVERSE + call $~lib/typedarray/Int64Array#get:length + call $~lib/util/bytes/REVERSE local.get $this local.set $1 global.get $~lib/memory/__stack_pointer @@ -43571,7 +42771,7 @@ local.get $1 return ) - (func $~lib/typedarray/Uint32Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Int64Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $array i32) (local $begin|4 i32) (local $end|5 i32) @@ -43600,7 +42800,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -43615,7 +42815,7 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $len local.get $begin|4 i32.const 0 @@ -43678,7 +42878,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 10 + i32.const 11 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -43693,6 +42893,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -43706,7 +42910,7 @@ local.get $19 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $begin|4 - i32.const 2 + i32.const 3 i32.shl i32.add i32.store offset=4 @@ -43714,11 +42918,11 @@ local.get $end|5 local.get $begin|4 i32.sub - i32.const 2 + i32.const 3 i32.shl i32.store offset=8 local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>|inlined.0" end local.set $19 global.get $~lib/memory/__stack_pointer @@ -43728,7 +42932,7 @@ local.get $19 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>" (local $values i32) (local $length i32) (local $array i32) @@ -43761,13 +42965,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -43792,7 +42996,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Uint32Array#__set + i64.extend_i32_s + call $~lib/typedarray/Int64Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -43808,7 +43013,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Uint32Array#__set + i64.extend_i32_s + call $~lib/typedarray/Int64Array#__set local.get $i i32.const 1 i32.add @@ -43822,7 +43028,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint32Array#reverse + call $~lib/typedarray/Int64Array#reverse drop i32.const 0 local.set $i|5 @@ -43838,7 +43044,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Uint32Array#__get + call $~lib/typedarray/Int64Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -43851,7 +43057,8 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i32.eq + i64.extend_i32_s + i64.eq i32.eqz if i32.const 0 @@ -43877,13 +43084,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Uint32Array#subarray + call $~lib/typedarray/Int64Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint32Array#reverse + call $~lib/typedarray/Int64Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -43893,9 +43100,9 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Uint32Array#__get - i32.const 8 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 8 + i64.eq i32.eqz if i32.const 0 @@ -43912,9 +43119,9 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Uint32Array#__get - i32.const 7 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 7 + i64.eq i32.eqz if i32.const 0 @@ -43931,9 +43138,9 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Uint32Array#__get - i32.const 6 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 6 + i64.eq i32.eqz if i32.const 0 @@ -43950,9 +43157,9 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Uint32Array#__get - i32.const 5 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 5 + i64.eq i32.eqz if i32.const 0 @@ -43967,7 +43174,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Uint64Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -43990,7 +43197,7 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length call $~lib/util/bytes/REVERSE local.get $this local.set $1 @@ -44001,7 +43208,7 @@ local.get $1 return ) - (func $~lib/typedarray/Int64Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Uint64Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $array i32) (local $begin|4 i32) (local $end|5 i32) @@ -44030,7 +43237,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -44045,7 +43252,7 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.set $len local.get $begin|4 i32.const 0 @@ -44108,7 +43315,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 11 + i32.const 12 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -44123,6 +43330,10 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 @@ -44148,7 +43359,7 @@ i32.shl i32.store offset=8 local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.set $19 global.get $~lib/memory/__stack_pointer @@ -44158,7 +43369,7 @@ local.get $19 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>" (local $values i32) (local $length i32) (local $array i32) @@ -44191,13 +43402,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int64Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int64Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -44223,7 +43434,7 @@ local.get $i call $~lib/array/Array#__get i64.extend_i32_s - call $~lib/typedarray/Int64Array#__set + call $~lib/typedarray/Uint64Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -44240,7 +43451,7 @@ local.get $i call $~lib/array/Array#__get i64.extend_i32_s - call $~lib/typedarray/Int64Array#__set + call $~lib/typedarray/Uint64Array#__set local.get $i i32.const 1 i32.add @@ -44254,7 +43465,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int64Array#reverse + call $~lib/typedarray/Uint64Array#reverse drop i32.const 0 local.set $i|5 @@ -44270,7 +43481,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Int64Array#__get + call $~lib/typedarray/Uint64Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -44310,13 +43521,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Int64Array#subarray + call $~lib/typedarray/Uint64Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Int64Array#reverse + call $~lib/typedarray/Uint64Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -44326,7 +43537,7 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Int64Array#__get + call $~lib/typedarray/Uint64Array#__get i64.const 8 i64.eq i32.eqz @@ -44345,7 +43556,7 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Int64Array#__get + call $~lib/typedarray/Uint64Array#__get i64.const 7 i64.eq i32.eqz @@ -44364,7 +43575,7 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Int64Array#__get + call $~lib/typedarray/Uint64Array#__get i64.const 6 i64.eq i32.eqz @@ -44383,7 +43594,7 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Int64Array#__get + call $~lib/typedarray/Uint64Array#__get i64.const 5 i64.eq i32.eqz @@ -44400,7 +43611,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#reverse (param $this i32) (result i32) + (func $~lib/typedarray/Float32Array#reverse (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -44423,8 +43634,8 @@ local.get $1 i32.store local.get $1 - call $~lib/typedarray/Uint64Array#get:length - call $~lib/util/bytes/REVERSE + call $~lib/typedarray/Float32Array#get:length + call $~lib/util/bytes/REVERSE local.get $this local.set $1 global.get $~lib/memory/__stack_pointer @@ -44434,7 +43645,7 @@ local.get $1 return ) - (func $~lib/typedarray/Uint64Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Float32Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) (local $array i32) (local $begin|4 i32) (local $end|5 i32) @@ -44463,7 +43674,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) + block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -44478,7 +43689,7 @@ local.get $19 i32.store offset=4 local.get $19 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $len local.get $begin|4 i32.const 0 @@ -44541,7 +43752,7 @@ local.set $end|5 global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 12 + i32.const 13 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 @@ -44556,42 +43767,322 @@ local.get $out local.get $buf i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buf i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $array - local.set $19 - global.get $~lib/memory/__stack_pointer - local.get $19 - i32.store offset=4 - local.get $19 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $begin|4 + call $~lib/rt/itcms/__link + local.get $out + local.get $array + local.set $19 + global.get $~lib/memory/__stack_pointer + local.get $19 + i32.store offset=4 + local.get $19 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $begin|4 + i32.const 2 + i32.shl + i32.add + i32.store offset=4 + local.get $out + local.get $end|5 + local.get $begin|4 + i32.sub + i32.const 2 + i32.shl + i32.store offset=8 + local.get $out + br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>|inlined.0" + end + local.set $19 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $19 + return + ) + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>" + (local $values i32) + (local $length i32) + (local $array i32) + (local $arrayWithOffset i32) + (local $i i32) + (local $i|5 i32) + (local $reversedSlice i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $std/typedarray/testArrayReverseValues + local.tee $values + i32.store + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $length + call $~lib/typedarray/Float32Array#constructor + local.tee $array + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $length + call $~lib/typedarray/Float32Array#constructor + local.tee $arrayWithOffset + i32.store offset=12 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + local.get $i + call $~lib/array/Array#__get + f32.convert_i32_s + call $~lib/typedarray/Float32Array#__set + local.get $arrayWithOffset + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + local.get $i + call $~lib/array/Array#__get + f32.convert_i32_s + call $~lib/typedarray/Float32Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/typedarray/Float32Array#reverse + drop + i32.const 0 + local.set $i|5 + loop $for-loop|1 + local.get $i|5 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|5 + call $~lib/typedarray/Float32Array#__get + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $length + i32.const 1 + i32.sub + local.get $i|5 + i32.sub + call $~lib/array/Array#__get + f32.convert_i32_s + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 570 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|5 + i32.const 1 + i32.add + local.set $i|5 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $arrayWithOffset + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=16 + local.get $7 + i32.const 4 + i32.const 8 + call $~lib/typedarray/Float32Array#subarray + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/typedarray/Float32Array#reverse + local.tee $reversedSlice + i32.store offset=20 + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + call $~lib/typedarray/Float32Array#__get + f32.const 8 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 575 i32.const 3 - i32.shl - i32.add - i32.store offset=4 - local.get $out - local.get $end|5 - local.get $begin|4 - i32.sub + call $~lib/builtins/abort + unreachable + end + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 1 + call $~lib/typedarray/Float32Array#__get + f32.const 7 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 576 i32.const 3 - i32.shl - i32.store offset=8 - local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>|inlined.0" + call $~lib/builtins/abort + unreachable end - local.set $19 + local.get $reversedSlice + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 2 + call $~lib/typedarray/Float32Array#__get + f32.const 6 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 577 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $reversedSlice + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 3 + call $~lib/typedarray/Float32Array#__get + f32.const 5 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 578 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer - local.get $19 + ) + (func $~lib/typedarray/Float64Array#reverse (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/typedarray/Float64Array#get:length + call $~lib/util/bytes/REVERSE + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 return ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>" + (func $"std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>" (local $values i32) (local $length i32) (local $array i32) @@ -44624,13 +44115,13 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint64Array#constructor + call $~lib/typedarray/Float64Array#constructor local.tee $array i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint64Array#constructor + call $~lib/typedarray/Float64Array#constructor local.tee $arrayWithOffset i32.store offset=12 i32.const 0 @@ -44655,8 +44146,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set + f64.convert_i32_s + call $~lib/typedarray/Float64Array#__set local.get $arrayWithOffset local.set $7 global.get $~lib/memory/__stack_pointer @@ -44672,8 +44163,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set + f64.convert_i32_s + call $~lib/typedarray/Float64Array#__set local.get $i i32.const 1 i32.add @@ -44687,7 +44178,7 @@ local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint64Array#reverse + call $~lib/typedarray/Float64Array#reverse drop i32.const 0 local.set $i|5 @@ -44703,7 +44194,7 @@ i32.store offset=4 local.get $7 local.get $i|5 - call $~lib/typedarray/Uint64Array#__get + call $~lib/typedarray/Float64Array#__get local.get $values local.set $7 global.get $~lib/memory/__stack_pointer @@ -44716,8 +44207,8 @@ local.get $i|5 i32.sub call $~lib/array/Array#__get - i64.extend_i32_s - i64.eq + f64.convert_i32_s + f64.eq i32.eqz if i32.const 0 @@ -44743,13 +44234,13 @@ local.get $7 i32.const 4 i32.const 8 - call $~lib/typedarray/Uint64Array#subarray + call $~lib/typedarray/Float64Array#subarray local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store offset=4 local.get $7 - call $~lib/typedarray/Uint64Array#reverse + call $~lib/typedarray/Float64Array#reverse local.tee $reversedSlice i32.store offset=20 local.get $reversedSlice @@ -44759,9 +44250,9 @@ i32.store offset=4 local.get $7 i32.const 0 - call $~lib/typedarray/Uint64Array#__get - i64.const 8 - i64.eq + call $~lib/typedarray/Float64Array#__get + f64.const 8 + f64.eq i32.eqz if i32.const 0 @@ -44778,9 +44269,9 @@ i32.store offset=4 local.get $7 i32.const 1 - call $~lib/typedarray/Uint64Array#__get - i64.const 7 - i64.eq + call $~lib/typedarray/Float64Array#__get + f64.const 7 + f64.eq i32.eqz if i32.const 0 @@ -44797,9 +44288,9 @@ i32.store offset=4 local.get $7 i32.const 2 - call $~lib/typedarray/Uint64Array#__get - i64.const 6 - i64.eq + call $~lib/typedarray/Float64Array#__get + f64.const 6 + f64.eq i32.eqz if i32.const 0 @@ -44816,9 +44307,9 @@ i32.store offset=4 local.get $7 i32.const 3 - call $~lib/typedarray/Uint64Array#__get - i64.const 5 - i64.eq + call $~lib/typedarray/Float64Array#__get + f64.const 5 + f64.eq i32.eqz if i32.const 0 @@ -44833,239 +44324,301 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#reverse (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/typedarray/Float32Array#get:length - call $~lib/util/bytes/REVERSE - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Float32Array#subarray (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $~lib/typedarray/Int8Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) - (local $begin|4 i32) - (local $end|5 i32) + (local $searchElement|4 i32) + (local $fromIndex|5 i32) + (local $index i32) (local $len i32) - (local $7 i32) (local $8 i32) (local $9 i32) - (local $10 i32) + (local $dataStart i32) (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $out i32) - (local $buf i32) - (local $19 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $"~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array i32.store - local.get $begin - local.set $begin|4 - local.get $end - local.set $end|5 + local.get $searchElement + local.set $searchElement|4 + local.get $fromIndex + local.set $fromIndex|5 + local.get $fromIndex|5 + local.set $index local.get $array - local.set $19 + local.set $11 global.get $~lib/memory/__stack_pointer - local.get $19 + local.get $11 i32.store offset=4 - local.get $19 - call $~lib/typedarray/Float32Array#get:length + local.get $11 + call $~lib/typedarray/Int8Array#get:length local.set $len - local.get $begin|4 + local.get $len i32.const 0 - i32.lt_s + i32.eq if (result i32) - local.get $len - local.get $begin|4 - i32.add - local.tee $7 - i32.const 0 - local.tee $8 - local.get $7 - local.get $8 - i32.gt_s - select + i32.const 1 else - local.get $begin|4 - local.tee $9 + local.get $index local.get $len - local.tee $10 - local.get $9 - local.get $10 - i32.lt_s - select + i32.ge_s end - local.set $begin|4 - local.get $end|5 + if + i32.const -1 + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.get $index i32.const 0 i32.lt_s - if (result i32) + if local.get $len - local.get $end|5 + local.get $index i32.add - local.tee $11 + local.tee $8 i32.const 0 - local.tee $12 - local.get $11 - local.get $12 + local.tee $9 + local.get $8 + local.get $9 i32.gt_s select - else - local.get $end|5 - local.tee $13 + local.set $index + end + local.get $array + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store offset=4 + local.get $11 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $dataStart + loop $while-continue|0 + local.get $index local.get $len - local.tee $14 - local.get $13 - local.get $14 i32.lt_s - select + if + local.get $dataStart + local.get $index + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.get $searchElement|4 + i32.extend8_s + i32.eq + if + local.get $index + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.get $index + i32.const 1 + i32.add + local.set $index + br $while-continue|0 + end end - local.set $end|5 - local.get $end|5 - local.tee $15 - local.get $begin|4 - local.tee $16 - local.get $15 - local.get $16 - i32.gt_s - select - local.set $end|5 + i32.const -1 + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/typedarray/Int8Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (local $array i32) + (local $searchElement|4 i32) + (local $fromIndex|5 i32) + (local $index i32) + (local $len i32) + (local $dataStart i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 13 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 + local.get $this + local.tee $array + i32.store + local.get $searchElement + local.set $searchElement|4 + local.get $fromIndex + local.set $fromIndex|5 + local.get $fromIndex|5 + local.set $index local.get $array - local.set $19 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $19 + local.get $9 i32.store offset=4 - local.get $19 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $buf - local.get $out - local.get $buf - i32.store - local.get $out - local.get $buf + local.get $9 + call $~lib/typedarray/Int8Array#get:length + local.set $len + local.get $len i32.const 0 - call $~lib/rt/itcms/__link - local.get $out + i32.eq + if + i32.const -1 + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.get $index + i32.const 0 + i32.lt_s + if + local.get $len + local.get $index + i32.add + local.set $index + else + local.get $index + local.get $len + i32.ge_s + if + local.get $len + i32.const 1 + i32.sub + local.set $index + end + end local.get $array - local.set $19 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $19 + local.get $9 i32.store offset=4 - local.get $19 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $begin|4 - i32.const 2 - i32.shl - i32.add - i32.store offset=4 - local.get $out - local.get $end|5 - local.get $begin|4 - i32.sub - i32.const 2 - i32.shl - i32.store offset=8 - local.get $out - br $"~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>|inlined.0" + local.set $dataStart + loop $while-continue|0 + local.get $index + i32.const 0 + i32.ge_s + if + local.get $dataStart + local.get $index + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.get $searchElement|4 + i32.extend8_s + i32.eq + if + local.get $index + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.get $index + i32.const 1 + i32.sub + local.set $index + br $while-continue|0 + end + end + i32.const -1 + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/typedarray/Int8Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + local.get $this + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/typedarray/Int8Array#get:length + local.set $fromIndex end - local.set $19 + local.get $this + local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $3 + i32.store + local.get $3 + local.get $searchElement + local.get $fromIndex + call $~lib/typedarray/Int8Array#lastIndexOf + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $19 - return + local.get $3 ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>" (local $values i32) (local $length i32) (local $array i32) - (local $arrayWithOffset i32) (local $i i32) - (local $i|5 i32) - (local $reversedSlice i32) - (local $7 i32) + (local $sliced i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 24 + i32.const 20 memory.fill global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayReverseValues + global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues local.tee $values i32.store local.get $values - local.set $7 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 + local.get $5 call $~lib/array/Array#get:length local.set $length global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Float32Array#constructor + call $~lib/typedarray/Int8Array#constructor local.tee $array i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $length - call $~lib/typedarray/Float32Array#constructor - local.tee $arrayWithOffset - i32.store offset=12 i32.const 0 local.set $i loop $for-loop|0 @@ -45074,39 +44627,22 @@ i32.lt_s if local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 - local.get $i - call $~lib/array/Array#__get - f32.convert_i32_s - call $~lib/typedarray/Float32Array#__set - local.get $arrayWithOffset - local.set $7 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 + local.get $5 local.get $i local.get $values - local.set $7 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 + local.get $5 + i32.store offset=12 + local.get $5 local.get $i call $~lib/array/Array#__get - f32.convert_i32_s - call $~lib/typedarray/Float32Array#__set + i32.extend8_s + call $~lib/typedarray/Int8Array#__set local.get $i i32.const 1 i32.add @@ -45115,434 +44651,577 @@ end end local.get $array - local.set $7 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - call $~lib/typedarray/Float32Array#reverse - drop + local.get $5 i32.const 0 - local.set $i|5 - loop $for-loop|1 - local.get $i|5 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|5 - call $~lib/typedarray/Float32Array#__get - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $length - i32.const 1 - i32.sub - local.get $i|5 - i32.sub - call $~lib/array/Array#__get - f32.convert_i32_s - f32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 570 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|5 - i32.const 1 - i32.add - local.set $i|5 - br $for-loop|1 - end + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 603 + i32.const 3 + call $~lib/builtins/abort + unreachable end + local.get $array + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $arrayWithOffset - local.set $7 + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 11 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 604 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 + local.get $5 + i32.store offset=4 + local.get $5 + i32.const -1 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 605 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 606 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 2 + call $~lib/typedarray/Int8Array#indexOf + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 607 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 3 + call $~lib/typedarray/Int8Array#indexOf + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 608 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 i32.const 4 - i32.const 8 - call $~lib/typedarray/Float32Array#subarray - local.set $7 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 609 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - call $~lib/typedarray/Float32Array#reverse - local.tee $reversedSlice - i32.store offset=20 - local.get $reversedSlice - local.set $7 + local.get $5 + i32.const 1 + i32.const 10 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 610 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 + local.get $5 + i32.const 1 + i32.const -100 + call $~lib/typedarray/Int8Array#indexOf + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 611 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 i32.const 0 - call $~lib/typedarray/Float32Array#__get - f32.const 8 - f32.eq + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#lastIndexOf@varargs + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 613 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 11 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#lastIndexOf@varargs + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 614 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const -1 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#lastIndexOf@varargs + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 615 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#lastIndexOf@varargs + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 616 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 617 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 3 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 618 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 2 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 619 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + i32.const 100 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 620 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 1 + i32.const -10 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const 1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 575 + i32.const 621 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 + local.get $array + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 + local.get $5 i32.const 1 - call $~lib/typedarray/Float32Array#__get - f32.const 7 - f32.eq + i32.const -11 + call $~lib/typedarray/Int8Array#lastIndexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 576 + i32.const 622 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $array + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 i32.store offset=4 - local.get $7 - i32.const 2 - call $~lib/typedarray/Float32Array#__get - f32.const 6 - f32.eq + local.get $5 + i32.const 4 + i32.const 9 + call $~lib/typedarray/Int8Array#subarray + local.tee $sliced + i32.store offset=16 + local.get $sliced + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 3 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 577 + i32.const 626 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - i32.const 3 - call $~lib/typedarray/Float32Array#__get - f32.const 5 - f32.eq + local.get $5 + i32.const 4 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const 4 + i32.const 4 + i32.sub + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 578 + i32.const 627 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Float64Array#reverse (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=4 + local.get $5 + i32.const 5 i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/typedarray/Float64Array#get:length - call $~lib/util/bytes/REVERSE - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer + call $~lib/typedarray/Int8Array#indexOf + i32.const 5 i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $"std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $arrayWithOffset i32) - (local $i i32) - (local $i|5 i32) - (local $reversedSlice i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 24 i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 24 - memory.fill - global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayReverseValues - local.tee $values - i32.store - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $length - call $~lib/typedarray/Float64Array#constructor - local.tee $array - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $length - call $~lib/typedarray/Float64Array#constructor - local.tee $arrayWithOffset - i32.store offset=12 - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 - local.get $i - call $~lib/array/Array#__get - f64.convert_i32_s - call $~lib/typedarray/Float64Array#__set - local.get $arrayWithOffset - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 - local.get $i - call $~lib/array/Array#__get - f64.convert_i32_s - call $~lib/typedarray/Float64Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 628 + i32.const 3 + call $~lib/builtins/abort + unreachable end - local.get $array - local.set $7 + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - call $~lib/typedarray/Float64Array#reverse - drop + local.get $5 + i32.const 9 i32.const 0 - local.set $i|5 - loop $for-loop|1 - local.get $i|5 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|5 - call $~lib/typedarray/Float64Array#__get - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $length - i32.const 1 - i32.sub - local.get $i|5 - i32.sub - call $~lib/array/Array#__get - f64.convert_i32_s - f64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 570 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|5 - i32.const 1 - i32.add - local.set $i|5 - br $for-loop|1 - end + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 629 + i32.const 3 + call $~lib/builtins/abort + unreachable end + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $arrayWithOffset - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=16 - local.get $7 - i32.const 4 - i32.const 8 - call $~lib/typedarray/Float64Array#subarray - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/typedarray/Float64Array#reverse - local.tee $reversedSlice - i32.store offset=20 - local.get $reversedSlice - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 + local.get $5 + i32.const 10 i32.const 0 - call $~lib/typedarray/Float64Array#__get - f64.const 8 - f64.eq + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 575 + i32.const 630 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - i32.const 1 - call $~lib/typedarray/Float64Array#__get - f64.const 7 - f64.eq + local.get $5 + i32.const 11 + i32.const 0 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 576 + i32.const 631 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - i32.const 2 - call $~lib/typedarray/Float64Array#__get - f64.const 6 - f64.eq + local.get $5 + i32.const 5 + i32.const 1 + call $~lib/typedarray/Int8Array#indexOf + i32.const 5 + i32.const 4 + i32.sub + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 577 + i32.const 632 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $reversedSlice - local.set $7 + local.get $sliced + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $5 i32.store offset=4 - local.get $7 - i32.const 3 - call $~lib/typedarray/Float64Array#__get - f64.const 5 - f64.eq + local.get $5 + i32.const 5 + i32.const 2 + call $~lib/typedarray/Int8Array#indexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 578 + i32.const 633 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -45560,7 +45239,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -45577,7 +45256,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length local.set $len local.get $len i32.const 0 @@ -45591,7 +45270,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.get $index i32.const 0 @@ -45627,13 +45306,14 @@ i32.const 0 i32.shl i32.add - i32.load8_s + i32.load8_u local.get $searchElement|4 - i32.extend8_s + i32.const 255 + i32.and i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.get $index i32.const 1 @@ -45643,7 +45323,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -45653,7 +45333,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int8Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -45669,7 +45349,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -45686,14 +45366,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.get $index i32.const 0 @@ -45732,13 +45412,14 @@ i32.const 0 i32.shl i32.add - i32.load8_s + i32.load8_u local.get $searchElement|4 - i32.extend8_s + i32.const 255 + i32.and i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.get $index i32.const 1 @@ -45748,7 +45429,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -45758,7 +45439,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int8Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45784,7 +45465,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length local.set $fromIndex end local.get $this @@ -45795,7 +45476,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -45803,7 +45484,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>" (local $values i32) (local $length i32) (local $array i32) @@ -45834,7 +45515,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Uint8Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -45859,8 +45540,9 @@ local.get $5 local.get $i call $~lib/array/Array#__get - i32.extend8_s - call $~lib/typedarray/Int8Array#__set + i32.const 255 + i32.and + call $~lib/typedarray/Uint8Array#__set local.get $i i32.const 1 i32.add @@ -45876,7 +45558,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 0 i32.eq i32.eqz @@ -45896,7 +45578,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -45916,7 +45598,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -45936,7 +45618,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 3 i32.eq i32.eqz @@ -45956,7 +45638,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 3 i32.eq i32.eqz @@ -45976,7 +45658,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 3 i32.eq i32.eqz @@ -45996,7 +45678,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46016,7 +45698,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46036,7 +45718,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 1 i32.eq i32.eqz @@ -46058,7 +45740,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -46080,7 +45762,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -46102,7 +45784,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -46124,7 +45806,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -46144,7 +45826,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -46164,7 +45846,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -46184,7 +45866,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -46204,7 +45886,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -46224,7 +45906,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -46244,7 +45926,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Int8Array#lastIndexOf + call $~lib/typedarray/Uint8Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -46265,7 +45947,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Int8Array#subarray + call $~lib/typedarray/Uint8Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -46276,7 +45958,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46296,7 +45978,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -46318,7 +46000,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -46340,7 +46022,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46360,7 +46042,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46380,7 +46062,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46400,7 +46082,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -46422,7 +46104,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Int8Array#indexOf + call $~lib/typedarray/Uint8Array#indexOf i32.const -1 i32.eq i32.eqz @@ -46439,7 +46121,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -46457,7 +46139,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -46474,7 +46156,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length local.set $len local.get $len i32.const 0 @@ -46488,7 +46170,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.get $index i32.const 0 @@ -46531,7 +46213,7 @@ i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.get $index i32.const 1 @@ -46541,7 +46223,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -46551,7 +46233,7 @@ local.get $11 return ) - (func $~lib/typedarray/Uint8Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -46567,7 +46249,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -46584,14 +46266,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.get $index i32.const 0 @@ -46637,7 +46319,7 @@ i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.get $index i32.const 1 @@ -46647,7 +46329,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -46657,7 +46339,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint8Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -46683,7 +46365,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length local.set $fromIndex end local.get $this @@ -46694,7 +46376,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -46702,7 +46384,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>" (local $values i32) (local $length i32) (local $array i32) @@ -46733,7 +46415,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8Array#constructor + call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -46760,7 +46442,7 @@ call $~lib/array/Array#__get i32.const 255 i32.and - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint8ClampedArray#__set local.get $i i32.const 1 i32.add @@ -46776,7 +46458,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 0 i32.eq i32.eqz @@ -46796,7 +46478,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -46816,7 +46498,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -46836,7 +46518,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 3 i32.eq i32.eqz @@ -46856,7 +46538,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 3 i32.eq i32.eqz @@ -46876,7 +46558,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 3 i32.eq i32.eqz @@ -46896,7 +46578,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -46916,7 +46598,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -46936,7 +46618,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 1 i32.eq i32.eqz @@ -46958,7 +46640,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -46980,7 +46662,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -47002,7 +46684,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -47024,7 +46706,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8Array#lastIndexOf@varargs + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -47044,7 +46726,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -47064,7 +46746,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -47084,7 +46766,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -47104,7 +46786,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -47124,7 +46806,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -47144,7 +46826,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Uint8Array#lastIndexOf + call $~lib/typedarray/Uint8ClampedArray#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -47165,7 +46847,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Uint8Array#subarray + call $~lib/typedarray/Uint8ClampedArray#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -47176,7 +46858,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -47196,7 +46878,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 4 i32.const 4 i32.sub @@ -47218,7 +46900,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 5 i32.const 4 i32.sub @@ -47240,7 +46922,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -47260,7 +46942,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -47280,7 +46962,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -47300,7 +46982,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const 5 i32.const 4 i32.sub @@ -47322,7 +47004,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Uint8Array#indexOf + call $~lib/typedarray/Uint8ClampedArray#indexOf i32.const -1 i32.eq i32.eqz @@ -47339,7 +47021,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int16Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -47357,7 +47039,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -47374,7 +47056,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length local.set $len local.get $len i32.const 0 @@ -47388,7 +47070,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.get $index i32.const 0 @@ -47421,17 +47103,16 @@ if local.get $dataStart local.get $index - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_u + i32.load16_s local.get $searchElement|4 - i32.const 255 - i32.and + i32.extend16_s i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.get $index i32.const 1 @@ -47441,7 +47122,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -47451,7 +47132,7 @@ local.get $11 return ) - (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int16Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -47467,7 +47148,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -47484,14 +47165,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.get $index i32.const 0 @@ -47527,17 +47208,16 @@ if local.get $dataStart local.get $index - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_u + i32.load16_s local.get $searchElement|4 - i32.const 255 - i32.and + i32.extend16_s i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.get $index i32.const 1 @@ -47547,7 +47227,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -47557,7 +47237,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int16Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -47583,7 +47263,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length local.set $fromIndex end local.get $this @@ -47594,7 +47274,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -47602,7 +47282,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>" (local $values i32) (local $length i32) (local $array i32) @@ -47633,7 +47313,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int16Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -47658,9 +47338,8 @@ local.get $5 local.get $i call $~lib/array/Array#__get - i32.const 255 - i32.and - call $~lib/typedarray/Uint8ClampedArray#__set + i32.extend16_s + call $~lib/typedarray/Int16Array#__set local.get $i i32.const 1 i32.add @@ -47676,7 +47355,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 0 i32.eq i32.eqz @@ -47696,7 +47375,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -47716,7 +47395,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -47736,7 +47415,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -47756,7 +47435,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -47776,7 +47455,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -47796,7 +47475,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -47816,7 +47495,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -47836,7 +47515,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 1 i32.eq i32.eqz @@ -47858,7 +47537,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs + call $~lib/typedarray/Int16Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -47880,7 +47559,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs + call $~lib/typedarray/Int16Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -47902,7 +47581,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs + call $~lib/typedarray/Int16Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -47924,7 +47603,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs + call $~lib/typedarray/Int16Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -47944,7 +47623,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -47964,7 +47643,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -47984,7 +47663,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -48004,7 +47683,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -48024,7 +47703,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -48044,7 +47723,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Uint8ClampedArray#lastIndexOf + call $~lib/typedarray/Int16Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -48065,7 +47744,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Uint8ClampedArray#subarray + call $~lib/typedarray/Int16Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -48076,7 +47755,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48096,7 +47775,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -48118,7 +47797,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -48140,7 +47819,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48160,7 +47839,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48180,7 +47859,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48200,7 +47879,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -48222,7 +47901,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#indexOf + call $~lib/typedarray/Int16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48239,7 +47918,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint16Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -48257,7 +47936,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -48274,7 +47953,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.set $len local.get $len i32.const 0 @@ -48288,7 +47967,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.get $index i32.const 0 @@ -48324,13 +48003,14 @@ i32.const 1 i32.shl i32.add - i32.load16_s + i32.load16_u local.get $searchElement|4 - i32.extend16_s + i32.const 65535 + i32.and i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.get $index i32.const 1 @@ -48340,7 +48020,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -48350,7 +48030,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int16Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint16Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -48366,7 +48046,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -48383,14 +48063,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.get $index i32.const 0 @@ -48429,13 +48109,14 @@ i32.const 1 i32.shl i32.add - i32.load16_s + i32.load16_u local.get $searchElement|4 - i32.extend16_s + i32.const 65535 + i32.and i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.get $index i32.const 1 @@ -48445,7 +48126,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -48455,7 +48136,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int16Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint16Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -48481,7 +48162,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.set $fromIndex end local.get $this @@ -48492,7 +48173,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -48500,7 +48181,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>" (local $values i32) (local $length i32) (local $array i32) @@ -48531,7 +48212,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -48556,8 +48237,9 @@ local.get $5 local.get $i call $~lib/array/Array#__get - i32.extend16_s - call $~lib/typedarray/Int16Array#__set + i32.const 65535 + i32.and + call $~lib/typedarray/Uint16Array#__set local.get $i i32.const 1 i32.add @@ -48573,7 +48255,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 0 i32.eq i32.eqz @@ -48593,7 +48275,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48613,7 +48295,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48633,7 +48315,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -48653,7 +48335,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -48673,7 +48355,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 3 i32.eq i32.eqz @@ -48693,7 +48375,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48713,7 +48395,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48733,7 +48415,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 1 i32.eq i32.eqz @@ -48755,7 +48437,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array#lastIndexOf@varargs + call $~lib/typedarray/Uint16Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -48777,7 +48459,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array#lastIndexOf@varargs + call $~lib/typedarray/Uint16Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -48799,7 +48481,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array#lastIndexOf@varargs + call $~lib/typedarray/Uint16Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -48821,7 +48503,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array#lastIndexOf@varargs + call $~lib/typedarray/Uint16Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -48841,7 +48523,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -48861,7 +48543,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -48881,7 +48563,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -48901,7 +48583,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -48921,7 +48603,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -48941,7 +48623,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Int16Array#lastIndexOf + call $~lib/typedarray/Uint16Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -48962,7 +48644,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Int16Array#subarray + call $~lib/typedarray/Uint16Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -48973,7 +48655,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -48993,7 +48675,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -49015,7 +48697,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -49037,7 +48719,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49057,7 +48739,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49077,7 +48759,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49097,7 +48779,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -49119,7 +48801,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Int16Array#indexOf + call $~lib/typedarray/Uint16Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49136,7 +48818,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int32Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -49154,7 +48836,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -49171,7 +48853,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length local.set $len local.get $len i32.const 0 @@ -49185,7 +48867,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.get $index i32.const 0 @@ -49218,17 +48900,15 @@ if local.get $dataStart local.get $index - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + i32.load local.get $searchElement|4 - i32.const 65535 - i32.and i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.get $index i32.const 1 @@ -49238,7 +48918,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -49248,7 +48928,7 @@ local.get $11 return ) - (func $~lib/typedarray/Uint16Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int32Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -49264,7 +48944,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -49281,14 +48961,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.get $index i32.const 0 @@ -49324,17 +49004,15 @@ if local.get $dataStart local.get $index - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + i32.load local.get $searchElement|4 - i32.const 65535 - i32.and i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.get $index i32.const 1 @@ -49344,7 +49022,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -49354,7 +49032,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint16Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int32Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -49380,7 +49058,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length local.set $fromIndex end local.get $this @@ -49391,7 +49069,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -49399,7 +49077,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>" (local $values i32) (local $length i32) (local $array i32) @@ -49430,7 +49108,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -49455,9 +49133,7 @@ local.get $5 local.get $i call $~lib/array/Array#__get - i32.const 65535 - i32.and - call $~lib/typedarray/Uint16Array#__set + call $~lib/typedarray/Int32Array#__set local.get $i i32.const 1 i32.add @@ -49473,7 +49149,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 0 i32.eq i32.eqz @@ -49493,7 +49169,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49513,7 +49189,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49533,7 +49209,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -49553,7 +49229,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -49573,7 +49249,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -49593,7 +49269,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49613,7 +49289,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49633,7 +49309,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 1 i32.eq i32.eqz @@ -49655,7 +49331,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array#lastIndexOf@varargs + call $~lib/typedarray/Int32Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -49677,7 +49353,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array#lastIndexOf@varargs + call $~lib/typedarray/Int32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -49699,7 +49375,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array#lastIndexOf@varargs + call $~lib/typedarray/Int32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -49721,7 +49397,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array#lastIndexOf@varargs + call $~lib/typedarray/Int32Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -49741,7 +49417,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -49761,7 +49437,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -49781,7 +49457,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -49801,7 +49477,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -49821,7 +49497,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -49841,7 +49517,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Uint16Array#lastIndexOf + call $~lib/typedarray/Int32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -49862,7 +49538,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Uint16Array#subarray + call $~lib/typedarray/Int32Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -49873,7 +49549,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49893,7 +49569,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -49915,7 +49591,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -49937,7 +49613,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49957,7 +49633,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49977,7 +49653,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -49997,7 +49673,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -50019,7 +49695,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Uint16Array#indexOf + call $~lib/typedarray/Int32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50036,7 +49712,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint32Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -50054,7 +49730,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -50071,7 +49747,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.set $len local.get $len i32.const 0 @@ -50085,7 +49761,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.get $index i32.const 0 @@ -50126,7 +49802,7 @@ i32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.get $index i32.const 1 @@ -50136,7 +49812,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -50146,7 +49822,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int32Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint32Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i32) (local $fromIndex|5 i32) @@ -50162,7 +49838,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -50179,14 +49855,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.get $index i32.const 0 @@ -50230,7 +49906,7 @@ i32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.get $index i32.const 1 @@ -50240,7 +49916,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -50250,7 +49926,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int32Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint32Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -50276,7 +49952,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.set $fromIndex end local.get $this @@ -50287,7 +49963,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -50295,7 +49971,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>" (local $values i32) (local $length i32) (local $array i32) @@ -50326,7 +50002,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -50351,7 +50027,7 @@ local.get $5 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Int32Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $i i32.const 1 i32.add @@ -50367,7 +50043,7 @@ local.get $5 i32.const 0 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 0 i32.eq i32.eqz @@ -50387,7 +50063,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50407,7 +50083,7 @@ local.get $5 i32.const -1 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50427,7 +50103,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -50447,7 +50123,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -50467,7 +50143,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -50487,7 +50163,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50507,7 +50183,7 @@ local.get $5 i32.const 1 i32.const 10 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50527,7 +50203,7 @@ local.get $5 i32.const 1 i32.const -100 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 1 i32.eq i32.eqz @@ -50549,7 +50225,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#lastIndexOf@varargs + call $~lib/typedarray/Uint32Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -50571,7 +50247,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#lastIndexOf@varargs + call $~lib/typedarray/Uint32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -50593,7 +50269,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#lastIndexOf@varargs + call $~lib/typedarray/Uint32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -50615,7 +50291,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#lastIndexOf@varargs + call $~lib/typedarray/Uint32Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -50635,7 +50311,7 @@ local.get $5 i32.const 3 i32.const 4 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -50655,7 +50331,7 @@ local.get $5 i32.const 3 i32.const 3 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -50675,7 +50351,7 @@ local.get $5 i32.const 3 i32.const 2 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -50695,7 +50371,7 @@ local.get $5 i32.const 1 i32.const 100 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -50715,7 +50391,7 @@ local.get $5 i32.const 1 i32.const -10 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -50735,7 +50411,7 @@ local.get $5 i32.const 1 i32.const -11 - call $~lib/typedarray/Int32Array#lastIndexOf + call $~lib/typedarray/Uint32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -50756,7 +50432,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Int32Array#subarray + call $~lib/typedarray/Uint32Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -50767,7 +50443,7 @@ local.get $5 i32.const 3 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50787,7 +50463,7 @@ local.get $5 i32.const 4 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -50809,7 +50485,7 @@ local.get $5 i32.const 5 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -50831,7 +50507,7 @@ local.get $5 i32.const 9 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50851,7 +50527,7 @@ local.get $5 i32.const 10 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50871,7 +50547,7 @@ local.get $5 i32.const 11 i32.const 0 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50891,7 +50567,7 @@ local.get $5 i32.const 5 i32.const 1 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -50913,7 +50589,7 @@ local.get $5 i32.const 5 i32.const 2 - call $~lib/typedarray/Int32Array#indexOf + call $~lib/typedarray/Uint32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -50930,9 +50606,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#indexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int64Array#indexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 i32) + (local $searchElement|4 i64) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -50948,7 +50624,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -50965,7 +50641,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $len local.get $len i32.const 0 @@ -50979,7 +50655,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.get $index i32.const 0 @@ -51012,15 +50688,15 @@ if local.get $dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load + i64.load local.get $searchElement|4 - i32.eq + i64.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.get $index i32.const 1 @@ -51030,7 +50706,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -51040,9 +50716,9 @@ local.get $11 return ) - (func $~lib/typedarray/Uint32Array#lastIndexOf (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int64Array#lastIndexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 i32) + (local $searchElement|4 i64) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -51056,7 +50732,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -51073,14 +50749,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.get $index i32.const 0 @@ -51116,15 +50792,15 @@ if local.get $dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load + i64.load local.get $searchElement|4 - i32.eq + i64.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.get $index i32.const 1 @@ -51134,7 +50810,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -51144,7 +50820,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint32Array#lastIndexOf@varargs (param $this i32) (param $searchElement i32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Int64Array#lastIndexOf@varargs (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -51170,7 +50846,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $fromIndex end local.get $this @@ -51181,7 +50857,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -51189,7 +50865,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>" (local $values i32) (local $length i32) (local $array i32) @@ -51220,7 +50896,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -51245,7 +50921,8 @@ local.get $5 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Uint32Array#__set + i64.extend_i32_s + call $~lib/typedarray/Int64Array#__set local.get $i i32.const 1 i32.add @@ -51259,9 +50936,9 @@ local.get $5 i32.store offset=4 local.get $5 + i64.const 0 i32.const 0 - i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 0 i32.eq i32.eqz @@ -51279,9 +50956,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 11 + i64.const 11 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51299,9 +50976,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const -1 + i64.const -1 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51319,9 +50996,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -51339,9 +51016,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 2 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -51359,9 +51036,9 @@ local.get $5 i32.store offset=4 local.get $5 + i64.const 3 i32.const 3 - i32.const 3 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -51379,9 +51056,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 4 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51399,9 +51076,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 1 + i64.const 1 i32.const 10 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51419,9 +51096,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 1 + i64.const 1 i32.const -100 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 1 i32.eq i32.eqz @@ -51439,11 +51116,11 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 0 + i64.const 0 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array#lastIndexOf@varargs + call $~lib/typedarray/Int64Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -51461,11 +51138,11 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 11 + i64.const 11 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array#lastIndexOf@varargs + call $~lib/typedarray/Int64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -51483,11 +51160,11 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const -1 + i64.const -1 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array#lastIndexOf@varargs + call $~lib/typedarray/Int64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -51505,11 +51182,11 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array#lastIndexOf@varargs + call $~lib/typedarray/Int64Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -51527,9 +51204,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 4 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -51547,9 +51224,9 @@ local.get $5 i32.store offset=4 local.get $5 + i64.const 3 i32.const 3 - i32.const 3 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -51567,9 +51244,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 2 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -51587,9 +51264,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 1 + i64.const 1 i32.const 100 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -51607,9 +51284,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 1 + i64.const 1 i32.const -10 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -51627,9 +51304,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 1 + i64.const 1 i32.const -11 - call $~lib/typedarray/Uint32Array#lastIndexOf + call $~lib/typedarray/Int64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -51650,7 +51327,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Uint32Array#subarray + call $~lib/typedarray/Int64Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -51659,9 +51336,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 3 + i64.const 3 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51679,9 +51356,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 4 + i64.const 4 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -51701,9 +51378,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 5 + i64.const 5 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -51723,9 +51400,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 9 + i64.const 9 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51743,9 +51420,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 10 + i64.const 10 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51763,9 +51440,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 11 + i64.const 11 i32.const 0 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51783,9 +51460,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 5 + i64.const 5 i32.const 1 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -51805,9 +51482,9 @@ local.get $5 i32.store offset=4 local.get $5 - i32.const 5 + i64.const 5 i32.const 2 - call $~lib/typedarray/Uint32Array#indexOf + call $~lib/typedarray/Int64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -51824,7 +51501,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#indexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint64Array#indexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i64) (local $fromIndex|5 i32) @@ -51842,7 +51519,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -51859,7 +51536,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.set $len local.get $len i32.const 0 @@ -51873,7 +51550,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.get $index i32.const 0 @@ -51914,7 +51591,7 @@ i64.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.get $index i32.const 1 @@ -51924,7 +51601,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -51934,7 +51611,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int64Array#lastIndexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint64Array#lastIndexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 i64) (local $fromIndex|5 i32) @@ -51950,7 +51627,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -51967,14 +51644,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.get $index i32.const 0 @@ -52018,7 +51695,7 @@ i64.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.get $index i32.const 1 @@ -52028,7 +51705,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -52038,7 +51715,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int64Array#lastIndexOf@varargs (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Uint64Array#lastIndexOf@varargs (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -52064,7 +51741,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.set $fromIndex end local.get $this @@ -52075,7 +51752,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -52083,7 +51760,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>" (local $values i32) (local $length i32) (local $array i32) @@ -52114,7 +51791,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int64Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -52140,7 +51817,7 @@ local.get $i call $~lib/array/Array#__get i64.extend_i32_s - call $~lib/typedarray/Int64Array#__set + call $~lib/typedarray/Uint64Array#__set local.get $i i32.const 1 i32.add @@ -52156,7 +51833,7 @@ local.get $5 i64.const 0 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 0 i32.eq i32.eqz @@ -52176,7 +51853,7 @@ local.get $5 i64.const 11 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52196,7 +51873,7 @@ local.get $5 i64.const -1 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52216,7 +51893,7 @@ local.get $5 i64.const 3 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -52236,7 +51913,7 @@ local.get $5 i64.const 3 i32.const 2 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -52256,7 +51933,7 @@ local.get $5 i64.const 3 i32.const 3 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -52276,7 +51953,7 @@ local.get $5 i64.const 3 i32.const 4 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52296,7 +51973,7 @@ local.get $5 i64.const 1 i32.const 10 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52316,7 +51993,7 @@ local.get $5 i64.const 1 i32.const -100 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 1 i32.eq i32.eqz @@ -52338,7 +52015,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int64Array#lastIndexOf@varargs + call $~lib/typedarray/Uint64Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -52360,7 +52037,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int64Array#lastIndexOf@varargs + call $~lib/typedarray/Uint64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -52382,7 +52059,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int64Array#lastIndexOf@varargs + call $~lib/typedarray/Uint64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -52404,7 +52081,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int64Array#lastIndexOf@varargs + call $~lib/typedarray/Uint64Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -52424,7 +52101,7 @@ local.get $5 i64.const 3 i32.const 4 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -52444,7 +52121,7 @@ local.get $5 i64.const 3 i32.const 3 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -52464,7 +52141,7 @@ local.get $5 i64.const 3 i32.const 2 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -52484,7 +52161,7 @@ local.get $5 i64.const 1 i32.const 100 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -52504,7 +52181,7 @@ local.get $5 i64.const 1 i32.const -10 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -52524,7 +52201,7 @@ local.get $5 i64.const 1 i32.const -11 - call $~lib/typedarray/Int64Array#lastIndexOf + call $~lib/typedarray/Uint64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -52545,7 +52222,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Int64Array#subarray + call $~lib/typedarray/Uint64Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -52556,7 +52233,7 @@ local.get $5 i64.const 3 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52576,7 +52253,7 @@ local.get $5 i64.const 4 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -52598,7 +52275,7 @@ local.get $5 i64.const 5 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -52620,7 +52297,7 @@ local.get $5 i64.const 9 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52640,7 +52317,7 @@ local.get $5 i64.const 10 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52660,7 +52337,7 @@ local.get $5 i64.const 11 i32.const 0 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52680,7 +52357,7 @@ local.get $5 i64.const 5 i32.const 1 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -52702,7 +52379,7 @@ local.get $5 i64.const 5 i32.const 2 - call $~lib/typedarray/Int64Array#indexOf + call $~lib/typedarray/Uint64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -52719,9 +52396,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#indexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float32Array#indexOf (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 i64) + (local $searchElement|4 f32) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -52737,7 +52414,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -52754,7 +52431,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $len local.get $len i32.const 0 @@ -52768,7 +52445,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 0 @@ -52801,15 +52478,15 @@ if local.get $dataStart local.get $index - i32.const 3 + i32.const 2 i32.shl i32.add - i64.load + f32.load local.get $searchElement|4 - i64.eq + f32.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 1 @@ -52819,7 +52496,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -52829,9 +52506,9 @@ local.get $11 return ) - (func $~lib/typedarray/Uint64Array#lastIndexOf (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float32Array#lastIndexOf (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 i64) + (local $searchElement|4 f32) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -52845,7 +52522,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -52862,14 +52539,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 0 @@ -52905,15 +52582,15 @@ if local.get $dataStart local.get $index - i32.const 3 + i32.const 2 i32.shl i32.add - i64.load + f32.load local.get $searchElement|4 - i64.eq + f32.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 1 @@ -52923,7 +52600,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -52933,7 +52610,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint64Array#lastIndexOf@varargs (param $this i32) (param $searchElement i64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float32Array#lastIndexOf@varargs (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -52959,7 +52636,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $fromIndex end local.get $this @@ -52970,7 +52647,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -52978,7 +52655,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>" (local $values i32) (local $length i32) (local $array i32) @@ -53009,7 +52686,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint64Array#constructor + call $~lib/typedarray/Float32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -53034,8 +52711,8 @@ local.get $5 local.get $i call $~lib/array/Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set + f32.convert_i32_s + call $~lib/typedarray/Float32Array#__set local.get $i i32.const 1 i32.add @@ -53049,9 +52726,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 0 + f32.const 0 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 0 i32.eq i32.eqz @@ -53069,9 +52746,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 11 + f32.const 11 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53089,9 +52766,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const -1 + f32.const -1 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53109,9 +52786,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -53129,9 +52806,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 2 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -53149,9 +52826,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 3 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 3 i32.eq i32.eqz @@ -53169,9 +52846,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 4 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53189,9 +52866,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 1 + f32.const 1 i32.const 10 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53209,9 +52886,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 1 + f32.const 1 i32.const -100 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 1 i32.eq i32.eqz @@ -53229,11 +52906,11 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 0 + f32.const 0 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint64Array#lastIndexOf@varargs + call $~lib/typedarray/Float32Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -53251,11 +52928,11 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 11 + f32.const 11 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint64Array#lastIndexOf@varargs + call $~lib/typedarray/Float32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -53273,11 +52950,11 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const -1 + f32.const -1 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint64Array#lastIndexOf@varargs + call $~lib/typedarray/Float32Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -53295,11 +52972,11 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint64Array#lastIndexOf@varargs + call $~lib/typedarray/Float32Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -53317,9 +52994,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 4 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -53337,9 +53014,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 3 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -53357,9 +53034,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 2 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -53377,9 +53054,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 1 + f32.const 1 i32.const 100 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -53397,9 +53074,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 1 + f32.const 1 i32.const -10 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -53417,9 +53094,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 1 + f32.const 1 i32.const -11 - call $~lib/typedarray/Uint64Array#lastIndexOf + call $~lib/typedarray/Float32Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -53440,7 +53117,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Uint64Array#subarray + call $~lib/typedarray/Float32Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -53449,9 +53126,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 3 + f32.const 3 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53469,9 +53146,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 4 + f32.const 4 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -53491,9 +53168,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 5 + f32.const 5 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -53513,9 +53190,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 9 + f32.const 9 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53533,9 +53210,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 10 + f32.const 10 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53553,9 +53230,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 11 + f32.const 11 i32.const 0 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53573,9 +53250,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 5 + f32.const 5 i32.const 1 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -53595,9 +53272,9 @@ local.get $5 i32.store offset=4 local.get $5 - i64.const 5 + f32.const 5 i32.const 2 - call $~lib/typedarray/Uint64Array#indexOf + call $~lib/typedarray/Float32Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53614,9 +53291,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#indexOf (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float64Array#indexOf (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 f32) + (local $searchElement|4 f64) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -53632,7 +53309,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) + block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -53649,7 +53326,7 @@ local.get $11 i32.store offset=4 local.get $11 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length local.set $len local.get $len i32.const 0 @@ -53663,7 +53340,7 @@ end if i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 0 @@ -53696,15 +53373,15 @@ if local.get $dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - f32.load + f64.load local.get $searchElement|4 - f32.eq + f64.eq if local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 1 @@ -53714,7 +53391,7 @@ end end i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.set $11 global.get $~lib/memory/__stack_pointer @@ -53724,9 +53401,9 @@ local.get $11 return ) - (func $~lib/typedarray/Float32Array#lastIndexOf (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float64Array#lastIndexOf (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 f32) + (local $searchElement|4 f64) (local $fromIndex|5 i32) (local $index i32) (local $len i32) @@ -53740,7 +53417,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) + block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -53757,14 +53434,14 @@ local.get $9 i32.store offset=4 local.get $9 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length local.set $len local.get $len i32.const 0 i32.eq if i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 0 @@ -53800,15 +53477,15 @@ if local.get $dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - f32.load + f64.load local.get $searchElement|4 - f32.eq + f64.eq if local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 1 @@ -53818,7 +53495,7 @@ end end i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0" + br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -53828,7 +53505,7 @@ local.get $9 return ) - (func $~lib/typedarray/Float32Array#lastIndexOf@varargs (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float64Array#lastIndexOf@varargs (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -53854,7 +53531,7 @@ local.get $3 i32.store local.get $3 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length local.set $fromIndex end local.get $this @@ -53865,7 +53542,7 @@ local.get $3 local.get $searchElement local.get $fromIndex - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -53873,7 +53550,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>" + (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>" (local $values i32) (local $length i32) (local $array i32) @@ -53904,7 +53581,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Float32Array#constructor + call $~lib/typedarray/Float64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -53929,8 +53606,8 @@ local.get $5 local.get $i call $~lib/array/Array#__get - f32.convert_i32_s - call $~lib/typedarray/Float32Array#__set + f64.convert_i32_s + call $~lib/typedarray/Float64Array#__set local.get $i i32.const 1 i32.add @@ -53944,9 +53621,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 0 + f64.const 0 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 0 i32.eq i32.eqz @@ -53964,9 +53641,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 11 + f64.const 11 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -53984,9 +53661,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const -1 + f64.const -1 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54004,9 +53681,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -54024,9 +53701,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 2 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -54044,9 +53721,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 3 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 3 i32.eq i32.eqz @@ -54064,9 +53741,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 4 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54084,9 +53761,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 1 + f64.const 1 i32.const 10 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54104,9 +53781,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 1 + f64.const 1 i32.const -100 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 1 i32.eq i32.eqz @@ -54124,11 +53801,11 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 0 + f64.const 0 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Float32Array#lastIndexOf@varargs + call $~lib/typedarray/Float64Array#lastIndexOf@varargs i32.const 0 i32.eq i32.eqz @@ -54146,11 +53823,11 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 11 + f64.const 11 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Float32Array#lastIndexOf@varargs + call $~lib/typedarray/Float64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -54168,11 +53845,11 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const -1 + f64.const -1 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Float32Array#lastIndexOf@varargs + call $~lib/typedarray/Float64Array#lastIndexOf@varargs i32.const -1 i32.eq i32.eqz @@ -54190,11 +53867,11 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Float32Array#lastIndexOf@varargs + call $~lib/typedarray/Float64Array#lastIndexOf@varargs i32.const 3 i32.eq i32.eqz @@ -54212,9 +53889,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 4 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -54232,9 +53909,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 3 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const 3 i32.eq i32.eqz @@ -54252,9 +53929,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 2 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -54272,9 +53949,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 1 + f64.const 1 i32.const 100 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -54292,9 +53969,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 1 + f64.const 1 i32.const -10 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const 1 i32.eq i32.eqz @@ -54312,9 +53989,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 1 + f64.const 1 i32.const -11 - call $~lib/typedarray/Float32Array#lastIndexOf + call $~lib/typedarray/Float64Array#lastIndexOf i32.const -1 i32.eq i32.eqz @@ -54335,7 +54012,7 @@ local.get $5 i32.const 4 i32.const 9 - call $~lib/typedarray/Float32Array#subarray + call $~lib/typedarray/Float64Array#subarray local.tee $sliced i32.store offset=16 local.get $sliced @@ -54344,9 +54021,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 3 + f64.const 3 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54364,9 +54041,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 4 + f64.const 4 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 4 i32.const 4 i32.sub @@ -54386,9 +54063,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 5 + f64.const 5 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -54408,9 +54085,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 9 + f64.const 9 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54428,9 +54105,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 10 + f64.const 10 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54448,9 +54125,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 11 + f64.const 11 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54468,9 +54145,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 5 + f64.const 5 i32.const 1 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const 5 i32.const 4 i32.sub @@ -54490,9 +54167,9 @@ local.get $5 i32.store offset=4 local.get $5 - f32.const 5 + f64.const 5 i32.const 2 - call $~lib/typedarray/Float32Array#indexOf + call $~lib/typedarray/Float64Array#indexOf i32.const -1 i32.eq i32.eqz @@ -54509,7 +54186,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float64Array#indexOf (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float64Array#includes (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) (local $array i32) (local $searchElement|4 f64) (local $fromIndex|5 i32) @@ -54518,7 +54195,8 @@ (local $8 i32) (local $9 i32) (local $dataStart i32) - (local $11 i32) + (local $elem f64) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -54527,7 +54205,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) + block $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -54536,14 +54214,16 @@ local.set $searchElement|4 local.get $fromIndex local.set $fromIndex|5 + i32.const 1 + drop local.get $fromIndex|5 local.set $index local.get $array - local.set $11 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $12 i32.store offset=4 - local.get $11 + local.get $12 call $~lib/typedarray/Float64Array#get:length local.set $len local.get $len @@ -54557,8 +54237,8 @@ i32.ge_s end if - i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 0 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 0 @@ -54577,11 +54257,11 @@ local.set $index end local.get $array - local.set $11 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $12 i32.store offset=4 - local.get $11 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $dataStart loop $while-continue|0 @@ -54595,11 +54275,24 @@ i32.shl i32.add f64.load + local.set $elem + local.get $elem local.get $searchElement|4 f64.eq + if (result i32) + i32.const 1 + else + local.get $elem + local.get $elem + f64.ne + local.get $searchElement|4 + local.get $searchElement|4 + f64.ne + i32.and + end if - local.get $index - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 1 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" end local.get $index i32.const 1 @@ -54608,25 +54301,28 @@ br $while-continue|0 end end - i32.const -1 - br $"~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 0 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" end - local.set $11 + local.set $12 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $12 return ) - (func $~lib/typedarray/Float64Array#lastIndexOf (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) + (func $~lib/typedarray/Float32Array#includes (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) (local $array i32) - (local $searchElement|4 f64) + (local $searchElement|4 f32) (local $fromIndex|5 i32) (local $index i32) (local $len i32) - (local $dataStart i32) + (local $8 i32) (local $9 i32) + (local $dataStart i32) + (local $elem f32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -54635,7 +54331,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) + block $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $this local.tee $array @@ -54644,22 +54340,31 @@ local.set $searchElement|4 local.get $fromIndex local.set $fromIndex|5 + i32.const 1 + drop local.get $fromIndex|5 local.set $index local.get $array - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=4 - local.get $9 - call $~lib/typedarray/Float64Array#get:length + local.get $12 + call $~lib/typedarray/Float32Array#get:length local.set $len local.get $len i32.const 0 i32.eq + if (result i32) + i32.const 1 + else + local.get $index + local.get $len + i32.ge_s + end if - i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 0 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 0 @@ -54668,753 +54373,1044 @@ local.get $len local.get $index i32.add + local.tee $8 + i32.const 0 + local.tee $9 + local.get $8 + local.get $9 + i32.gt_s + select local.set $index - else - local.get $index - local.get $len - i32.ge_s - if - local.get $len - i32.const 1 - i32.sub - local.set $index - end end local.get $array - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=4 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $dataStart loop $while-continue|0 local.get $index - i32.const 0 - i32.ge_s + local.get $len + i32.lt_s if local.get $dataStart local.get $index - i32.const 3 + i32.const 2 i32.shl i32.add - f64.load + f32.load + local.set $elem + local.get $elem local.get $searchElement|4 - f64.eq + f32.eq + if (result i32) + i32.const 1 + else + local.get $elem + local.get $elem + f32.ne + local.get $searchElement|4 + local.get $searchElement|4 + f32.ne + i32.and + end if - local.get $index - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 1 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" end local.get $index i32.const 1 - i32.sub + i32.add local.set $index br $while-continue|0 end end - i32.const -1 - br $"~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0" + i32.const 0 + br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" end - local.set $9 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/string/String#substring (param $this i32) (param $start i32) (param $end i32) (result i32) + (local $len i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $finalStart i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $finalEnd i32) + (local $14 i32) + (local $15 i32) + (local $fromPos i32) + (local $17 i32) + (local $18 i32) + (local $toPos i32) + (local $size i32) + (local $out i32) + (local $22 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store + local.get $22 + call $~lib/string/String#get:length + local.set $len + local.get $start + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.tee $6 + local.get $len + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + local.set $finalStart + local.get $end + local.tee $9 + i32.const 0 + local.tee $10 + local.get $9 + local.get $10 + i32.gt_s + select + local.tee $11 + local.get $len + local.tee $12 + local.get $11 + local.get $12 + i32.lt_s + select + local.set $finalEnd + local.get $finalStart + local.tee $14 + local.get $finalEnd + local.tee $15 + local.get $14 + local.get $15 + i32.lt_s + select + i32.const 1 + i32.shl + local.set $fromPos + local.get $finalStart + local.tee $17 + local.get $finalEnd + local.tee $18 + local.get $17 + local.get $18 + i32.gt_s + select + i32.const 1 + i32.shl + local.set $toPos + local.get $toPos + local.get $fromPos + i32.sub + local.set $size + local.get $size + i32.eqz + if + i32.const 6752 + local.set $22 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $22 + return + end + local.get $fromPos + i32.eqz + if (result i32) + local.get $toPos + local.get $len + i32.const 1 + i32.shl + i32.eq + else + i32.const 0 + end + if + local.get $this + local.set $22 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $22 + return + end + global.get $~lib/memory/__stack_pointer + local.get $size + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $fromPos + i32.add + local.get $size + memory.copy + local.get $out + local.set $22 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $22 + return + ) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (local $lastIndex i32) + (local $value i32) + (local $sepLen i32) + (local $estLen i32) + (local $result i32) + (local $offset i32) + (local $value|9 i32) + (local $i i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $length + i32.const 1 + i32.sub + local.set $lastIndex + local.get $lastIndex + i32.const 0 + i32.lt_s + if + i32.const 6752 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $lastIndex + i32.eqz + if + local.get $dataStart + i32.load8_s + local.set $value + i32.const 1 + drop + i32.const 1 + i32.const 4 + i32.le_u + drop + local.get $value + i32.const 10 + call $~lib/util/number/itoa32 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $separator + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + call $~lib/string/String#get:length + local.set $sepLen + i32.const 11 + local.get $sepLen + i32.add + local.get $lastIndex + i32.mul + i32.const 11 + i32.add + local.set $estLen + global.get $~lib/memory/__stack_pointer + local.get $estLen + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result + i32.store offset=4 + i32.const 0 + local.set $offset + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $lastIndex + i32.lt_s + if + local.get $dataStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $sepLen + if + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $separator + local.get $sepLen + i32.const 1 + i32.shl + memory.copy + local.get $offset + local.get $sepLen + i32.add + local.set $offset + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $dataStart + local.get $lastIndex + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $estLen + local.get $offset + i32.gt_s + if + local.get $result + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 0 + local.get $offset + call $~lib/string/String#substring + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $result + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/typedarray/Int8Array#join (param $this i32) (param $separator i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/typedarray/Int8Array#get:length + local.get $separator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/util/string/joinIntegerArray + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $9 + local.get $2 return ) - (func $~lib/typedarray/Float64Array#lastIndexOf@varargs (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) + (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) + (local $leftLength i32) (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $left + local.get $right + i32.eq + if + i32.const 1 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + local.get $left i32.const 0 - i32.store - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - local.get $this + i32.eq + if (result i32) + i32.const 1 + else + local.get $right + i32.const 0 + i32.eq + end + if + i32.const 0 local.set $3 global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $3 - i32.store + return + end + local.get $left + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + local.set $leftLength + local.get $leftLength + local.get $right + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/string/String#get:length + i32.ne + if + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer local.get $3 - call $~lib/typedarray/Float64Array#get:length - local.set $fromIndex + return end - local.get $this + local.get $left local.set $3 global.get $~lib/memory/__stack_pointer local.get $3 i32.store local.get $3 - local.get $searchElement - local.get $fromIndex - call $~lib/typedarray/Float64Array#lastIndexOf + i32.const 0 + local.get $right local.set $3 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $3 + i32.store offset=4 + local.get $3 + i32.const 0 + local.get $leftLength + call $~lib/util/string/compareImpl + i32.eqz + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer local.get $3 + return ) - (func $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $i i32) - (local $sliced i32) - (local $5 i32) + (func $~lib/typedarray/Int8Array#toString (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 20 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 20 - memory.fill + i32.store + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues - local.tee $values + local.get $1 i32.store - local.get $values - local.set $5 + local.get $1 + i32.const 8560 + call $~lib/typedarray/Int8Array#join + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - call $~lib/array/Array#get:length - local.set $length + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>" + (local $array i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 0 - local.get $length - call $~lib/typedarray/Float64Array#constructor - local.tee $array - i32.store offset=8 - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $length - i32.lt_s - if - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - local.get $i - local.get $values - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=12 - local.get $5 - local.get $i - call $~lib/array/Array#__get - f64.convert_i32_s - call $~lib/typedarray/Float64Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - local.get $array - local.set $5 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 0 - i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 603 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 11 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 604 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const -1 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 605 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 5 + call $~lib/typedarray/Int8Array#constructor + local.tee $array + i32.store local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 3 + local.get $1 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 606 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 2 - call $~lib/typedarray/Float64Array#indexOf - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 607 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 3 - call $~lib/typedarray/Float64Array#indexOf - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 608 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 4 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 609 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 1 - i32.const 10 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 610 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 1 - i32.const -100 - call $~lib/typedarray/Float64Array#indexOf - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 611 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 0 i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float64Array#lastIndexOf@varargs - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 613 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + call $~lib/typedarray/Int8Array#__set local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 11 + local.get $1 i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float64Array#lastIndexOf@varargs - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 614 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 2 + call $~lib/typedarray/Int8Array#__set local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const -1 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float64Array#lastIndexOf@varargs - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 615 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + local.get $1 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Int8Array#__set local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float64Array#lastIndexOf@varargs + local.get $1 i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 616 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 4 + call $~lib/typedarray/Int8Array#__set local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 3 + local.get $1 i32.const 4 - call $~lib/typedarray/Float64Array#lastIndexOf - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 617 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 5 + call $~lib/typedarray/Int8Array#__set + i32.const 0 + drop local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 3 - call $~lib/typedarray/Float64Array#lastIndexOf - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 618 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $5 + local.get $1 + i32.store offset=8 + local.get $1 + i32.const 8560 + call $~lib/typedarray/Int8Array#join + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 3 - i32.const 2 - call $~lib/typedarray/Float64Array#lastIndexOf - i32.const -1 - i32.eq + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 619 - i32.const 3 + i32.const 675 + i32.const 5 call $~lib/builtins/abort unreachable end local.get $array - local.set $5 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 + i32.store offset=8 + local.get $1 + call $~lib/typedarray/Int8Array#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store offset=4 - local.get $5 - f64.const 1 - i32.const 100 - call $~lib/typedarray/Float64Array#lastIndexOf - i32.const 1 - i32.eq + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 620 - i32.const 3 + i32.const 676 + i32.const 5 call $~lib/builtins/abort unreachable end - local.get $array - local.set $5 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 1 - i32.const -10 - call $~lib/typedarray/Float64Array#lastIndexOf + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (local $lastIndex i32) + (local $value i32) + (local $sepLen i32) + (local $estLen i32) + (local $result i32) + (local $offset i32) + (local $value|9 i32) + (local $i i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $length i32.const 1 - i32.eq - i32.eqz + i32.sub + local.set $lastIndex + local.get $lastIndex + i32.const 0 + i32.lt_s if - i32.const 0 - i32.const 544 - i32.const 621 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 6752 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return end - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 1 - i32.const -11 - call $~lib/typedarray/Float64Array#lastIndexOf - i32.const -1 - i32.eq + local.get $lastIndex i32.eqz if + local.get $dataStart + i32.load8_u + local.set $value i32.const 0 - i32.const 544 - i32.const 622 - i32.const 3 - call $~lib/builtins/abort - unreachable + drop + i32.const 1 + i32.const 4 + i32.le_u + drop + local.get $value + i32.const 10 + call $~lib/util/number/utoa32 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return end + local.get $separator + local.set $11 global.get $~lib/memory/__stack_pointer - local.get $array - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - i32.const 4 - i32.const 9 - call $~lib/typedarray/Float64Array#subarray - local.tee $sliced - i32.store offset=16 - local.get $sliced - local.set $5 + local.get $11 + i32.store + local.get $11 + call $~lib/string/String#get:length + local.set $sepLen + i32.const 10 + local.get $sepLen + i32.add + local.get $lastIndex + i32.mul + i32.const 10 + i32.add + local.set $estLen global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $estLen + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result i32.store offset=4 - local.get $5 - f64.const 3 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz + local.set $offset + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $lastIndex + i32.lt_s + if + local.get $dataStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $sepLen + if + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $separator + local.get $sepLen + i32.const 1 + i32.shl + memory.copy + local.get $offset + local.get $sepLen + i32.add + local.set $offset + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $dataStart + local.get $lastIndex + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $estLen + local.get $offset + i32.gt_s if + local.get $result + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 i32.const 0 - i32.const 544 - i32.const 626 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $offset + call $~lib/string/String#substring + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return end - local.get $sliced - local.set $5 + local.get $result + local.set $11 global.get $~lib/memory/__stack_pointer - local.get $5 + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/typedarray/Uint8Array#join (param $this i32) (param $separator i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 i32.store offset=4 - local.get $5 - f64.const 4 - i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const 4 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/typedarray/Uint8Array#get:length + local.get $separator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/util/string/joinIntegerArray + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Uint8Array#toString (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 627 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $sliced - local.set $5 + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 5 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const 5 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 8560 + call $~lib/typedarray/Uint8Array#join + local.set $1 + global.get $~lib/memory/__stack_pointer i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>" + (local $array i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 i32.sub - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 628 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $sliced - local.set $5 + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 9 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 629 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $sliced - local.set $5 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 - f64.const 10 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 630 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $sliced - local.set $5 + i32.const 5 + call $~lib/typedarray/Uint8Array#constructor + local.tee $array + i32.store + local.get $array + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 11 + local.get $1 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 631 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $sliced - local.set $5 + i32.const 1 + call $~lib/typedarray/Uint8Array#__set + local.get $array + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 i32.store offset=4 - local.get $5 - f64.const 5 + local.get $1 i32.const 1 - call $~lib/typedarray/Float64Array#indexOf - i32.const 5 + i32.const 2 + call $~lib/typedarray/Uint8Array#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Uint8Array#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 i32.const 4 - i32.sub - i32.eq + call $~lib/typedarray/Uint8Array#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + i32.const 5 + call $~lib/typedarray/Uint8Array#__set + i32.const 0 + drop + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + i32.const 8560 + call $~lib/typedarray/Uint8Array#join + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 632 - i32.const 3 + i32.const 675 + i32.const 5 call $~lib/builtins/abort unreachable end - local.get $sliced - local.set $5 + local.get $array + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $1 + i32.store offset=8 + local.get $1 + call $~lib/typedarray/Uint8Array#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store offset=4 - local.get $5 - f64.const 5 - i32.const 2 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 - i32.eq + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 633 - i32.const 3 + i32.const 676 + i32.const 5 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 20 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float64Array#includes (param $this i32) (param $searchElement f64) (param $fromIndex i32) (result i32) - (local $array i32) - (local $searchElement|4 f64) - (local $fromIndex|5 i32) - (local $index i32) - (local $len i32) - (local $8 i32) - (local $9 i32) - (local $dataStart i32) - (local $elem f64) - (local $12 i32) + (func $~lib/typedarray/Uint8ClampedArray#join (param $this i32) (param $separator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -55423,389 +55419,181 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $array - i32.store - local.get $searchElement - local.set $searchElement|4 - local.get $fromIndex - local.set $fromIndex|5 - i32.const 1 - drop - local.get $fromIndex|5 - local.set $index - local.get $array - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=4 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - local.set $len - local.get $len - i32.const 0 - i32.eq - if (result i32) - i32.const 1 - else - local.get $index - local.get $len - i32.ge_s - end - if - i32.const 0 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" - end - local.get $index - i32.const 0 - i32.lt_s - if - local.get $len - local.get $index - i32.add - local.tee $8 - i32.const 0 - local.tee $9 - local.get $8 - local.get $9 - i32.gt_s - select - local.set $index - end - local.get $array - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=4 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $dataStart - loop $while-continue|0 - local.get $index - local.get $len - i32.lt_s - if - local.get $dataStart - local.get $index - i32.const 3 - i32.shl - i32.add - f64.load - local.set $elem - local.get $elem - local.get $searchElement|4 - f64.eq - if (result i32) - i32.const 1 - else - local.get $elem - local.get $elem - f64.ne - local.get $searchElement|4 - local.get $searchElement|4 - f64.ne - i32.and - end - if - i32.const 1 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" - end - local.get $index - i32.const 1 - i32.add - local.set $index - br $while-continue|0 - end - end - i32.const 0 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0" - end - local.set $12 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.get $separator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/util/string/joinIntegerArray + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $12 + local.get $2 return ) - (func $~lib/typedarray/Float32Array#includes (param $this i32) (param $searchElement f32) (param $fromIndex i32) (result i32) - (local $array i32) - (local $searchElement|4 f32) - (local $fromIndex|5 i32) - (local $index i32) - (local $len i32) - (local $8 i32) - (local $9 i32) - (local $dataStart i32) - (local $elem f32) - (local $12 i32) + (func $~lib/typedarray/Uint8ClampedArray#toString (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - block $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $array - i32.store - local.get $searchElement - local.set $searchElement|4 - local.get $fromIndex - local.set $fromIndex|5 - i32.const 1 - drop - local.get $fromIndex|5 - local.set $index - local.get $array - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=4 - local.get $12 - call $~lib/typedarray/Float32Array#get:length - local.set $len - local.get $len - i32.const 0 - i32.eq - if (result i32) - i32.const 1 - else - local.get $index - local.get $len - i32.ge_s - end - if - i32.const 0 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" - end - local.get $index - i32.const 0 - i32.lt_s - if - local.get $len - local.get $index - i32.add - local.tee $8 - i32.const 0 - local.tee $9 - local.get $8 - local.get $9 - i32.gt_s - select - local.set $index - end - local.get $array - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=4 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $dataStart - loop $while-continue|0 - local.get $index - local.get $len - i32.lt_s - if - local.get $dataStart - local.get $index - i32.const 2 - i32.shl - i32.add - f32.load - local.set $elem - local.get $elem - local.get $searchElement|4 - f32.eq - if (result i32) - i32.const 1 - else - local.get $elem - local.get $elem - f32.ne - local.get $searchElement|4 - local.get $searchElement|4 - f32.ne - i32.and - end - if - i32.const 1 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" - end - local.get $index - i32.const 1 - i32.add - local.set $index - br $while-continue|0 - end - end - i32.const 0 - br $"~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0" - end - local.set $12 + i32.const 0 + i32.store + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 8 + local.get $1 + i32.store + local.get $1 + i32.const 8560 + call $~lib/typedarray/Uint8ClampedArray#join + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $12 + local.get $1 return ) - (func $~lib/string/String#substring (param $this i32) (param $start i32) (param $end i32) (result i32) - (local $len i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $finalStart i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $finalEnd i32) - (local $14 i32) - (local $15 i32) - (local $fromPos i32) - (local $17 i32) - (local $18 i32) - (local $toPos i32) - (local $size i32) - (local $out i32) - (local $22 i32) + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>" + (local $array i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - local.get $this - local.set $22 global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store - local.get $22 - call $~lib/string/String#get:length - local.set $len - local.get $start - local.tee $4 i32.const 0 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - local.tee $6 - local.get $len - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - local.set $finalStart - local.get $end - local.tee $9 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $~lib/typedarray/Uint8ClampedArray#constructor + local.tee $array + i32.store + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 i32.const 0 - local.tee $10 - local.get $9 - local.get $10 - i32.gt_s - select - local.tee $11 - local.get $len - local.tee $12 - local.get $11 - local.get $12 - i32.lt_s - select - local.set $finalEnd - local.get $finalStart - local.tee $14 - local.get $finalEnd - local.tee $15 - local.get $14 - local.get $15 - i32.lt_s - select i32.const 1 - i32.shl - local.set $fromPos - local.get $finalStart - local.tee $17 - local.get $finalEnd - local.tee $18 - local.get $17 - local.get $18 - i32.gt_s - select + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 i32.const 1 - i32.shl - local.set $toPos - local.get $toPos - local.get $fromPos - i32.sub - local.set $size - local.get $size + i32.const 2 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 4 + i32.const 5 + call $~lib/typedarray/Uint8ClampedArray#__set + i32.const 0 + drop + local.get $array + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + i32.const 8560 + call $~lib/typedarray/Uint8ClampedArray#join + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq i32.eqz if - i32.const 6752 - local.set $22 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $22 - return - end - local.get $fromPos - i32.eqz - if (result i32) - local.get $toPos - local.get $len - i32.const 1 - i32.shl - i32.eq - else i32.const 0 + i32.const 544 + i32.const 675 + i32.const 5 + call $~lib/builtins/abort + unreachable end - if - local.get $this - local.set $22 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $22 - return - end + local.get $array + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $size - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out + local.get $1 + i32.store offset=8 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store offset=4 - local.get $out - local.get $this - local.get $fromPos - i32.add - local.get $size - memory.copy - local.get $out - local.set $22 + local.get $1 + i32.const 8592 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 676 + i32.const 5 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $22 - return ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) (local $value i32) (local $sepLen i32) @@ -55844,11 +55632,11 @@ i32.eqz if local.get $dataStart - i32.load8_s + i32.load16_s local.set $value i32.const 1 drop - i32.const 1 + i32.const 2 i32.const 4 i32.le_u drop @@ -55898,10 +55686,10 @@ if local.get $dataStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_s + i32.load16_s local.set $value|9 local.get $offset local.get $result @@ -55910,7 +55698,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $sepLen @@ -55939,10 +55727,10 @@ end local.get $dataStart local.get $lastIndex - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_s + i32.load16_s local.set $value|9 local.get $offset local.get $result @@ -55951,7 +55739,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $estLen @@ -55984,7 +55772,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int8Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Int16Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56007,14 +55795,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Int16Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56023,103 +55811,7 @@ local.get $2 return ) - (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) - (local $leftLength i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $left - local.get $right - i32.eq - if - i32.const 1 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - end - local.get $left - i32.const 0 - i32.eq - if (result i32) - i32.const 1 - else - local.get $right - i32.const 0 - i32.eq - end - if - i32.const 0 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - end - local.get $left - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/string/String#get:length - local.set $leftLength - local.get $leftLength - local.get $right - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - call $~lib/string/String#get:length - i32.ne - if - i32.const 0 - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - end - local.get $left - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - i32.const 0 - local.get $right - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=4 - local.get $3 - i32.const 0 - local.get $leftLength - call $~lib/util/string/compareImpl - i32.eqz - local.set $3 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $~lib/typedarray/Int8Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Int16Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56136,7 +55828,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Int8Array#join + call $~lib/typedarray/Int16Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56145,7 +55837,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -56162,7 +55854,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Int16Array#constructor local.tee $array i32.store local.get $array @@ -56173,7 +55865,7 @@ local.get $1 i32.const 0 i32.const 1 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56182,7 +55874,7 @@ local.get $1 i32.const 1 i32.const 2 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56191,7 +55883,7 @@ local.get $1 i32.const 2 i32.const 3 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56200,7 +55892,7 @@ local.get $1 i32.const 3 i32.const 4 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56209,7 +55901,7 @@ local.get $1 i32.const 4 i32.const 5 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int16Array#__set i32.const 0 drop local.get $array @@ -56219,7 +55911,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Int8Array#join + call $~lib/typedarray/Int16Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56242,7 +55934,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Int8Array#toString + call $~lib/typedarray/Int16Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56264,7 +55956,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) (local $value i32) (local $sepLen i32) @@ -56303,11 +55995,11 @@ i32.eqz if local.get $dataStart - i32.load8_u + i32.load16_u local.set $value i32.const 0 drop - i32.const 1 + i32.const 2 i32.const 4 i32.le_u drop @@ -56357,10 +56049,10 @@ if local.get $dataStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_u + i32.load16_u local.set $value|9 local.get $offset local.get $result @@ -56369,7 +56061,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $sepLen @@ -56398,10 +56090,10 @@ end local.get $dataStart local.get $lastIndex - i32.const 0 + i32.const 1 i32.shl i32.add - i32.load8_u + i32.load16_u local.set $value|9 local.get $offset local.get $result @@ -56410,7 +56102,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $estLen @@ -56443,7 +56135,7 @@ local.get $11 return ) - (func $~lib/typedarray/Uint8Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Uint16Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56466,14 +56158,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56482,7 +56174,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint8Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Uint16Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56499,7 +56191,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Uint8Array#join + call $~lib/typedarray/Uint16Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56508,7 +56200,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -56525,7 +56217,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Uint8Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $array i32.store local.get $array @@ -56536,7 +56228,7 @@ local.get $1 i32.const 0 i32.const 1 - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56545,7 +56237,7 @@ local.get $1 i32.const 1 i32.const 2 - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56554,7 +56246,7 @@ local.get $1 i32.const 2 i32.const 3 - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56563,7 +56255,7 @@ local.get $1 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56572,7 +56264,7 @@ local.get $1 i32.const 4 i32.const 5 - call $~lib/typedarray/Uint8Array#__set + call $~lib/typedarray/Uint16Array#__set i32.const 0 drop local.get $array @@ -56582,7 +56274,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Uint8Array#join + call $~lib/typedarray/Uint16Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56605,7 +56297,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Uint8Array#toString + call $~lib/typedarray/Uint16Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56627,7 +56319,186 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (local $lastIndex i32) + (local $value i32) + (local $sepLen i32) + (local $estLen i32) + (local $result i32) + (local $offset i32) + (local $value|9 i32) + (local $i i32) + (local $11 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $length + i32.const 1 + i32.sub + local.set $lastIndex + local.get $lastIndex + i32.const 0 + i32.lt_s + if + i32.const 6752 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $lastIndex + i32.eqz + if + local.get $dataStart + i32.load + local.set $value + i32.const 1 + drop + i32.const 4 + i32.const 4 + i32.le_u + drop + local.get $value + i32.const 10 + call $~lib/util/number/itoa32 + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $separator + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + call $~lib/string/String#get:length + local.set $sepLen + i32.const 11 + local.get $sepLen + i32.add + local.get $lastIndex + i32.mul + i32.const 11 + i32.add + local.set $estLen + global.get $~lib/memory/__stack_pointer + local.get $estLen + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result + i32.store offset=4 + i32.const 0 + local.set $offset + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $lastIndex + i32.lt_s + if + local.get $dataStart + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $sepLen + if + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $separator + local.get $sepLen + i32.const 1 + i32.shl + memory.copy + local.get $offset + local.get $sepLen + i32.add + local.set $offset + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + local.get $dataStart + local.get $lastIndex + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value|9 + local.get $offset + local.get $result + local.get $offset + i32.const 1 + i32.shl + i32.add + local.get $value|9 + call $~lib/util/number/itoa_buffered + i32.add + local.set $offset + local.get $estLen + local.get $offset + i32.gt_s + if + local.get $result + local.set $11 + global.get $~lib/memory/__stack_pointer + local.get $11 + i32.store + local.get $11 + i32.const 0 + local.get $offset + call $~lib/string/String#substring + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + end + local.get $result + local.set $11 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $11 + return + ) + (func $~lib/typedarray/Int32Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56650,14 +56521,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int32Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56666,7 +56537,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint8ClampedArray#toString (param $this i32) (result i32) + (func $~lib/typedarray/Int32Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56683,7 +56554,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Uint8ClampedArray#join + call $~lib/typedarray/Int32Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -56692,7 +56563,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -56709,7 +56580,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $array i32.store local.get $array @@ -56720,7 +56591,7 @@ local.get $1 i32.const 0 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56729,7 +56600,7 @@ local.get $1 i32.const 1 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56738,7 +56609,7 @@ local.get $1 i32.const 2 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56747,7 +56618,7 @@ local.get $1 i32.const 3 i32.const 4 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -56756,7 +56627,7 @@ local.get $1 i32.const 4 i32.const 5 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set i32.const 0 drop local.get $array @@ -56766,7 +56637,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Uint8ClampedArray#join + call $~lib/typedarray/Int32Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56789,7 +56660,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Uint8ClampedArray#toString + call $~lib/typedarray/Int32Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -56811,7 +56682,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) (local $value i32) (local $sepLen i32) @@ -56850,17 +56721,17 @@ i32.eqz if local.get $dataStart - i32.load16_s + i32.load local.set $value - i32.const 1 + i32.const 0 drop - i32.const 2 + i32.const 4 i32.const 4 i32.le_u drop local.get $value i32.const 10 - call $~lib/util/number/itoa32 + call $~lib/util/number/utoa32 local.set $11 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -56877,12 +56748,12 @@ local.get $11 call $~lib/string/String#get:length local.set $sepLen - i32.const 11 + i32.const 10 local.get $sepLen i32.add local.get $lastIndex i32.mul - i32.const 11 + i32.const 10 i32.add local.set $estLen global.get $~lib/memory/__stack_pointer @@ -56904,10 +56775,10 @@ if local.get $dataStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_s + i32.load local.set $value|9 local.get $offset local.get $result @@ -56916,7 +56787,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $sepLen @@ -56945,10 +56816,10 @@ end local.get $dataStart local.get $lastIndex - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_s + i32.load local.set $value|9 local.get $offset local.get $result @@ -56957,7 +56828,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $estLen @@ -56990,7 +56861,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int16Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Uint32Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57013,14 +56884,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57029,7 +56900,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int16Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Uint32Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57046,7 +56917,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Int16Array#join + call $~lib/typedarray/Uint32Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57055,7 +56926,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -57072,7 +56943,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $array i32.store local.get $array @@ -57083,7 +56954,7 @@ local.get $1 i32.const 0 i32.const 1 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57092,7 +56963,7 @@ local.get $1 i32.const 1 i32.const 2 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57101,7 +56972,7 @@ local.get $1 i32.const 2 i32.const 3 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57110,7 +56981,7 @@ local.get $1 i32.const 3 i32.const 4 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57119,7 +56990,7 @@ local.get $1 i32.const 4 i32.const 5 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set i32.const 0 drop local.get $array @@ -57129,7 +57000,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Int16Array#join + call $~lib/typedarray/Uint32Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57152,7 +57023,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Int16Array#toString + call $~lib/typedarray/Uint32Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57174,14 +57045,14 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) - (local $value i32) + (local $value i64) (local $sepLen i32) (local $estLen i32) (local $result i32) (local $offset i32) - (local $value|9 i32) + (local $value|9 i64) (local $i i32) (local $11 i32) global.get $~lib/memory/__stack_pointer @@ -57213,17 +57084,19 @@ i32.eqz if local.get $dataStart - i32.load16_u + i64.load local.set $value - i32.const 0 + i32.const 1 drop - i32.const 2 + i32.const 8 i32.const 4 i32.le_u drop local.get $value + i32.wrap_i64 + i64.extend_i32_s i32.const 10 - call $~lib/util/number/utoa32 + call $~lib/util/number/itoa64 local.set $11 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57240,12 +57113,12 @@ local.get $11 call $~lib/string/String#get:length local.set $sepLen - i32.const 10 + i32.const 21 local.get $sepLen i32.add local.get $lastIndex i32.mul - i32.const 10 + i32.const 21 i32.add local.set $estLen global.get $~lib/memory/__stack_pointer @@ -57267,10 +57140,10 @@ if local.get $dataStart local.get $i - i32.const 1 + i32.const 3 i32.shl i32.add - i32.load16_u + i64.load local.set $value|9 local.get $offset local.get $result @@ -57279,7 +57152,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $sepLen @@ -57308,10 +57181,10 @@ end local.get $dataStart local.get $lastIndex - i32.const 1 + i32.const 3 i32.shl i32.add - i32.load16_u + i64.load local.set $value|9 local.get $offset local.get $result @@ -57320,7 +57193,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $estLen @@ -57353,7 +57226,7 @@ local.get $11 return ) - (func $~lib/typedarray/Uint16Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Int64Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57376,14 +57249,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int64Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57392,7 +57265,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint16Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Int64Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57409,7 +57282,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Uint16Array#join + call $~lib/typedarray/Int64Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57418,7 +57291,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -57435,7 +57308,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $array i32.store local.get $array @@ -57445,8 +57318,8 @@ i32.store offset=4 local.get $1 i32.const 0 - i32.const 1 - call $~lib/typedarray/Uint16Array#__set + i64.const 1 + call $~lib/typedarray/Int64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57454,8 +57327,8 @@ i32.store offset=4 local.get $1 i32.const 1 - i32.const 2 - call $~lib/typedarray/Uint16Array#__set + i64.const 2 + call $~lib/typedarray/Int64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57463,8 +57336,8 @@ i32.store offset=4 local.get $1 i32.const 2 - i32.const 3 - call $~lib/typedarray/Uint16Array#__set + i64.const 3 + call $~lib/typedarray/Int64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57472,8 +57345,8 @@ i32.store offset=4 local.get $1 i32.const 3 - i32.const 4 - call $~lib/typedarray/Uint16Array#__set + i64.const 4 + call $~lib/typedarray/Int64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57481,8 +57354,8 @@ i32.store offset=4 local.get $1 i32.const 4 - i32.const 5 - call $~lib/typedarray/Uint16Array#__set + i64.const 5 + call $~lib/typedarray/Int64Array#__set i32.const 0 drop local.get $array @@ -57492,7 +57365,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Uint16Array#join + call $~lib/typedarray/Int64Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57515,7 +57388,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Uint16Array#toString + call $~lib/typedarray/Int64Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57537,14 +57410,14 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) - (local $value i32) + (local $value i64) (local $sepLen i32) (local $estLen i32) (local $result i32) (local $offset i32) - (local $value|9 i32) + (local $value|9 i64) (local $i i32) (local $11 i32) global.get $~lib/memory/__stack_pointer @@ -57576,17 +57449,17 @@ i32.eqz if local.get $dataStart - i32.load + i64.load local.set $value - i32.const 1 + i32.const 0 drop - i32.const 4 + i32.const 8 i32.const 4 i32.le_u drop local.get $value i32.const 10 - call $~lib/util/number/itoa32 + call $~lib/util/number/utoa64 local.set $11 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57603,12 +57476,12 @@ local.get $11 call $~lib/string/String#get:length local.set $sepLen - i32.const 11 + i32.const 20 local.get $sepLen i32.add local.get $lastIndex i32.mul - i32.const 11 + i32.const 20 i32.add local.set $estLen global.get $~lib/memory/__stack_pointer @@ -57630,10 +57503,10 @@ if local.get $dataStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load + i64.load local.set $value|9 local.get $offset local.get $result @@ -57642,7 +57515,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $sepLen @@ -57671,10 +57544,10 @@ end local.get $dataStart local.get $lastIndex - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load + i64.load local.set $value|9 local.get $offset local.get $result @@ -57683,7 +57556,7 @@ i32.shl i32.add local.get $value|9 - call $~lib/util/number/itoa_buffered + call $~lib/util/number/itoa_buffered i32.add local.set $offset local.get $estLen @@ -57716,7 +57589,7 @@ local.get $11 return ) - (func $~lib/typedarray/Int32Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Uint64Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57739,14 +57612,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinIntegerArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -57755,7 +57628,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int32Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Uint64Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57772,7 +57645,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Int32Array#join + call $~lib/typedarray/Uint64Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -57781,7 +57654,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -57798,7 +57671,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $array i32.store local.get $array @@ -57808,8 +57681,8 @@ i32.store offset=4 local.get $1 i32.const 0 - i32.const 1 - call $~lib/typedarray/Int32Array#__set + i64.const 1 + call $~lib/typedarray/Uint64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57817,8 +57690,8 @@ i32.store offset=4 local.get $1 i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#__set + i64.const 2 + call $~lib/typedarray/Uint64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57826,8 +57699,8 @@ i32.store offset=4 local.get $1 i32.const 2 - i32.const 3 - call $~lib/typedarray/Int32Array#__set + i64.const 3 + call $~lib/typedarray/Uint64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57835,8 +57708,8 @@ i32.store offset=4 local.get $1 i32.const 3 - i32.const 4 - call $~lib/typedarray/Int32Array#__set + i64.const 4 + call $~lib/typedarray/Uint64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -57844,8 +57717,8 @@ i32.store offset=4 local.get $1 i32.const 4 - i32.const 5 - call $~lib/typedarray/Int32Array#__set + i64.const 5 + call $~lib/typedarray/Uint64Array#__set i32.const 0 drop local.get $array @@ -57855,7 +57728,7 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Int32Array#join + call $~lib/typedarray/Uint64Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57878,7 +57751,7 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Int32Array#toString + call $~lib/typedarray/Uint64Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 @@ -57900,16 +57773,15 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinFloatArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) - (local $value i32) (local $sepLen i32) (local $estLen i32) (local $result i32) (local $offset i32) - (local $value|9 i32) + (local $value f32) (local $i i32) - (local $11 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -57927,51 +57799,42 @@ i32.lt_s if i32.const 6752 - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $lastIndex i32.eqz if local.get $dataStart - i32.load - local.set $value - i32.const 0 - drop - i32.const 4 - i32.const 4 - i32.le_u - drop - local.get $value - i32.const 10 - call $~lib/util/number/utoa32 - local.set $11 + f32.load + call $~lib/util/number/dtoa + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $separator - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $10 i32.store - local.get $11 + local.get $10 call $~lib/string/String#get:length local.set $sepLen - i32.const 10 + i32.const 28 local.get $sepLen i32.add local.get $lastIndex i32.mul - i32.const 10 + i32.const 28 i32.add local.set $estLen global.get $~lib/memory/__stack_pointer @@ -57996,16 +57859,16 @@ i32.const 2 i32.shl i32.add - i32.load - local.set $value|9 + f32.load + local.set $value local.get $offset local.get $result local.get $offset i32.const 1 i32.shl i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered + local.get $value + call $~lib/util/number/dtoa_buffered i32.add local.set $offset local.get $sepLen @@ -58037,16 +57900,16 @@ i32.const 2 i32.shl i32.add - i32.load - local.set $value|9 + f32.load + local.set $value local.get $offset local.get $result local.get $offset i32.const 1 i32.shl i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered + local.get $value + call $~lib/util/number/dtoa_buffered i32.add local.set $offset local.get $estLen @@ -58054,32 +57917,32 @@ i32.gt_s if local.get $result - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $10 i32.store - local.get $11 + local.get $10 i32.const 0 local.get $offset call $~lib/string/String#substring - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $result - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return ) - (func $~lib/typedarray/Uint32Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Float32Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -58102,14 +57965,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Float32Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinFloatArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -58118,7 +57981,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint32Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Float32Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -58135,7 +57998,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Uint32Array#join + call $~lib/typedarray/Float32Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -58144,7 +58007,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -58161,7 +58024,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Float32Array#constructor local.tee $array i32.store local.get $array @@ -58171,8 +58034,8 @@ i32.store offset=4 local.get $1 i32.const 0 - i32.const 1 - call $~lib/typedarray/Uint32Array#__set + f32.const 1 + call $~lib/typedarray/Float32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58180,8 +58043,8 @@ i32.store offset=4 local.get $1 i32.const 1 - i32.const 2 - call $~lib/typedarray/Uint32Array#__set + f32.const 2 + call $~lib/typedarray/Float32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58189,8 +58052,8 @@ i32.store offset=4 local.get $1 i32.const 2 - i32.const 3 - call $~lib/typedarray/Uint32Array#__set + f32.const 3 + call $~lib/typedarray/Float32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58198,8 +58061,8 @@ i32.store offset=4 local.get $1 i32.const 3 - i32.const 4 - call $~lib/typedarray/Uint32Array#__set + f32.const 4 + call $~lib/typedarray/Float32Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58207,9 +58070,9 @@ i32.store offset=4 local.get $1 i32.const 4 - i32.const 5 - call $~lib/typedarray/Uint32Array#__set - i32.const 0 + f32.const 5 + call $~lib/typedarray/Float32Array#__set + i32.const 1 drop local.get $array local.set $1 @@ -58218,19 +58081,19 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Uint32Array#join + call $~lib/typedarray/Float32Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 local.get $1 - i32.const 8592 + i32.const 9776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 675 + i32.const 672 i32.const 5 call $~lib/builtins/abort unreachable @@ -58241,19 +58104,19 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Uint32Array#toString + call $~lib/typedarray/Float32Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 local.get $1 - i32.const 8592 + i32.const 9776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 676 + i32.const 673 i32.const 5 call $~lib/builtins/abort unreachable @@ -58263,16 +58126,15 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) + (func $~lib/util/string/joinFloatArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) (local $lastIndex i32) - (local $value i64) (local $sepLen i32) (local $estLen i32) (local $result i32) (local $offset i32) - (local $value|9 i64) + (local $value f64) (local $i i32) - (local $11 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer i32.const 8 i32.sub @@ -58290,53 +58152,42 @@ i32.lt_s if i32.const 6752 - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $lastIndex i32.eqz if local.get $dataStart - i64.load - local.set $value - i32.const 1 - drop - i32.const 8 - i32.const 4 - i32.le_u - drop - local.get $value - i32.wrap_i64 - i64.extend_i32_s - i32.const 10 - call $~lib/util/number/itoa64 - local.set $11 + f64.load + call $~lib/util/number/dtoa + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $separator - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $10 i32.store - local.get $11 + local.get $10 call $~lib/string/String#get:length local.set $sepLen - i32.const 21 + i32.const 28 local.get $sepLen i32.add local.get $lastIndex i32.mul - i32.const 21 + i32.const 28 i32.add local.set $estLen global.get $~lib/memory/__stack_pointer @@ -58361,16 +58212,16 @@ i32.const 3 i32.shl i32.add - i64.load - local.set $value|9 + f64.load + local.set $value local.get $offset local.get $result local.get $offset i32.const 1 i32.shl i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered + local.get $value + call $~lib/util/number/dtoa_buffered i32.add local.set $offset local.get $sepLen @@ -58402,16 +58253,16 @@ i32.const 3 i32.shl i32.add - i64.load - local.set $value|9 + f64.load + local.set $value local.get $offset local.get $result local.get $offset i32.const 1 i32.shl i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered + local.get $value + call $~lib/util/number/dtoa_buffered i32.add local.set $offset local.get $estLen @@ -58419,32 +58270,32 @@ i32.gt_s if local.get $result - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $11 + local.get $10 i32.store - local.get $11 + local.get $10 i32.const 0 local.get $offset call $~lib/string/String#substring - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return end local.get $result - local.set $11 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $10 return ) - (func $~lib/typedarray/Int64Array#join (param $this i32) (param $separator i32) (result i32) + (func $~lib/typedarray/Float64Array#join (param $this i32) (param $separator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -58467,14 +58318,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Float64Array#get:length local.get $separator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/string/joinIntegerArray + call $~lib/util/string/joinFloatArray local.set $2 global.get $~lib/memory/__stack_pointer i32.const 8 @@ -58483,7 +58334,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int64Array#toString (param $this i32) (result i32) + (func $~lib/typedarray/Float64Array#toString (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -58500,7 +58351,7 @@ i32.store local.get $1 i32.const 8560 - call $~lib/typedarray/Int64Array#join + call $~lib/typedarray/Float64Array#join local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -58509,7 +58360,7 @@ local.get $1 return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>" + (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>" (local $array i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -58526,7 +58377,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Int64Array#constructor + call $~lib/typedarray/Float64Array#constructor local.tee $array i32.store local.get $array @@ -58536,8 +58387,8 @@ i32.store offset=4 local.get $1 i32.const 0 - i64.const 1 - call $~lib/typedarray/Int64Array#__set + f64.const 1 + call $~lib/typedarray/Float64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58545,8 +58396,8 @@ i32.store offset=4 local.get $1 i32.const 1 - i64.const 2 - call $~lib/typedarray/Int64Array#__set + f64.const 2 + call $~lib/typedarray/Float64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58554,8 +58405,8 @@ i32.store offset=4 local.get $1 i32.const 2 - i64.const 3 - call $~lib/typedarray/Int64Array#__set + f64.const 3 + call $~lib/typedarray/Float64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58563,8 +58414,8 @@ i32.store offset=4 local.get $1 i32.const 3 - i64.const 4 - call $~lib/typedarray/Int64Array#__set + f64.const 4 + call $~lib/typedarray/Float64Array#__set local.get $array local.set $1 global.get $~lib/memory/__stack_pointer @@ -58572,9 +58423,9 @@ i32.store offset=4 local.get $1 i32.const 4 - i64.const 5 - call $~lib/typedarray/Int64Array#__set - i32.const 0 + f64.const 5 + call $~lib/typedarray/Float64Array#__set + i32.const 1 drop local.get $array local.set $1 @@ -58583,19 +58434,19 @@ i32.store offset=8 local.get $1 i32.const 8560 - call $~lib/typedarray/Int64Array#join + call $~lib/typedarray/Float64Array#join local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 local.get $1 - i32.const 8592 + i32.const 9776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 675 + i32.const 672 i32.const 5 call $~lib/builtins/abort unreachable @@ -58606,19 +58457,19 @@ local.get $1 i32.store offset=8 local.get $1 - call $~lib/typedarray/Int64Array#toString + call $~lib/typedarray/Float64Array#toString local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=4 local.get $1 - i32.const 8592 + i32.const 9776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 544 - i32.const 676 + i32.const 673 i32.const 5 call $~lib/builtins/abort unreachable @@ -58628,226 +58479,438 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinIntegerArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) - (local $lastIndex i32) - (local $value i64) - (local $sepLen i32) - (local $estLen i32) - (local $result i32) - (local $offset i32) - (local $value|9 i64) - (local $i i32) - (local $11 i32) + (func $~lib/typedarray/Uint8Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $buffer|3 i32) + (local $byteOffset|4 i32) + (local $len i32) + (local $byteLength i32) + (local $bufferByteLength i32) + (local $out i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - local.get $length - i32.const 1 - i32.sub - local.set $lastIndex - local.get $lastIndex + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.lt_s - if - i32.const 6752 - local.set $11 + i32.store offset=8 + block $"~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $11 - return - end - local.get $lastIndex - i32.eqz - if - local.get $dataStart - i64.load - local.set $value + local.get $buffer + local.tee $buffer|3 + i32.store + local.get $byteOffset + local.set $byteOffset|4 + local.get $length + local.set $len + local.get $buffer|3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bufferByteLength + local.get $byteOffset|4 + local.get $bufferByteLength + i32.gt_u + local.get $byteOffset|4 i32.const 0 - drop - i32.const 8 - i32.const 4 - i32.le_u - drop - local.get $value - i32.const 10 - call $~lib/util/number/utoa64 - local.set $11 + i32.and + i32.or + if + i32.const 336 + i32.const 608 + i32.const 1867 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 0 + i32.lt_s + if + local.get $len + i32.const -1 + i32.eq + if + local.get $bufferByteLength + i32.const 0 + i32.and + if + i32.const 32 + i32.const 608 + i32.const 1872 + i32.const 9 + call $~lib/builtins/abort + unreachable + end + local.get $bufferByteLength + local.get $byteOffset|4 + i32.sub + local.set $byteLength + else + i32.const 32 + i32.const 608 + i32.const 1876 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + else + local.get $len + i32.const 0 + i32.shl + local.set $byteLength + local.get $byteOffset|4 + local.get $byteLength + i32.add + local.get $bufferByteLength + i32.gt_s + if + i32.const 32 + i32.const 608 + i32.const 1881 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $out + local.get $buffer|3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buffer|3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $byteLength + i32.store offset=8 + local.get $out + local.get $buffer|3 + local.get $byteOffset|4 i32.add - global.set $~lib/memory/__stack_pointer - local.get $11 - return + i32.store offset=4 + local.get $out + br $"~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>|inlined.0" end - local.get $separator - local.set $11 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $11 - i32.store - local.get $11 - call $~lib/string/String#get:length - local.set $sepLen - i32.const 20 - local.get $sepLen - i32.add - local.get $lastIndex - i32.mul - i32.const 20 + i32.const 12 i32.add - local.set $estLen + global.set $~lib/memory/__stack_pointer + local.get $9 + return + ) + (func $~lib/typedarray/Uint8Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $estLen - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result - i32.store offset=4 - i32.const 0 - local.set $offset i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $lastIndex - i32.lt_s - if - local.get $dataStart - local.get $i - i32.const 3 - i32.shl - i32.add - i64.load - local.set $value|9 - local.get $offset - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered - i32.add - local.set $offset - local.get $sepLen - if - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $separator - local.get $sepLen - i32.const 1 - i32.shl - memory.copy - local.get $offset - local.get $sepLen - i32.add - local.set $offset + i32.store + block $2of2 + block $1of2 + block $0of2 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of2 $1of2 $2of2 $outOfRange + end + unreachable end - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.const 0 + local.set $byteOffset end + i32.const -1 + local.set $length end - local.get $dataStart - local.get $lastIndex - i32.const 3 - i32.shl - i32.add - i64.load - local.set $value|9 - local.get $offset - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $value|9 - call $~lib/util/number/itoa_buffered + local.get $buffer + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $byteOffset + local.get $length + call $~lib/typedarray/Uint8Array.wrap + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.set $offset - local.get $estLen - local.get $offset - i32.gt_s - if - local.get $result - local.set $11 - global.get $~lib/memory/__stack_pointer - local.get $11 - i32.store - local.get $11 + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/arraybuffer/ArrayBuffer#slice (param $this i32) (param $begin i32) (param $end i32) (result i32) + (local $length i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $outSize i32) + (local $out i32) + (local $16 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $this + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store + local.get $16 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $length + local.get $begin + i32.const 0 + i32.lt_s + if (result i32) + local.get $length + local.get $begin + i32.add + local.tee $4 i32.const 0 - local.get $offset - call $~lib/string/String#substring - local.set $11 - global.get $~lib/memory/__stack_pointer - i32.const 8 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + else + local.get $begin + local.tee $6 + local.get $length + local.tee $7 + local.get $6 + local.get $7 + i32.lt_s + select + end + local.set $begin + local.get $end + i32.const 0 + i32.lt_s + if (result i32) + local.get $length + local.get $end i32.add - global.set $~lib/memory/__stack_pointer + local.tee $8 + i32.const 0 + local.tee $9 + local.get $8 + local.get $9 + i32.gt_s + select + else + local.get $end + local.tee $10 + local.get $length + local.tee $11 + local.get $10 local.get $11 - return + i32.lt_s + select end - local.get $result - local.set $11 + local.set $end + local.get $end + local.get $begin + i32.sub + local.tee $12 + i32.const 0 + local.tee $13 + local.get $12 + local.get $13 + i32.gt_s + select + local.set $outSize + global.get $~lib/memory/__stack_pointer + local.get $outSize + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=4 + local.get $out + local.get $this + local.get $begin + i32.add + local.get $outSize + memory.copy + local.get $out + local.set $16 global.get $~lib/memory/__stack_pointer i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $11 + local.get $16 return ) - (func $~lib/typedarray/Uint64Array#join (param $this i32) (param $separator i32) (result i32) - (local $2 i32) + (func $~lib/typedarray/Int8Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $buffer|3 i32) + (local $byteOffset|4 i32) + (local $len i32) + (local $byteLength i32) + (local $bufferByteLength i32) + (local $out i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/typedarray/Uint64Array#get:length - local.get $separator - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/string/joinIntegerArray - local.set $2 + i32.const 0 + i32.store offset=8 + block $"~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $buffer + local.tee $buffer|3 + i32.store + local.get $byteOffset + local.set $byteOffset|4 + local.get $length + local.set $len + local.get $buffer|3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bufferByteLength + local.get $byteOffset|4 + local.get $bufferByteLength + i32.gt_u + local.get $byteOffset|4 + i32.const 0 + i32.and + i32.or + if + i32.const 336 + i32.const 608 + i32.const 1867 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 0 + i32.lt_s + if + local.get $len + i32.const -1 + i32.eq + if + local.get $bufferByteLength + i32.const 0 + i32.and + if + i32.const 32 + i32.const 608 + i32.const 1872 + i32.const 9 + call $~lib/builtins/abort + unreachable + end + local.get $bufferByteLength + local.get $byteOffset|4 + i32.sub + local.set $byteLength + else + i32.const 32 + i32.const 608 + i32.const 1876 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + else + local.get $len + i32.const 0 + i32.shl + local.set $byteLength + local.get $byteOffset|4 + local.get $byteLength + i32.add + local.get $bufferByteLength + i32.gt_s + if + i32.const 32 + i32.const 608 + i32.const 1881 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $out + local.get $buffer|3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buffer|3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $byteLength + i32.store offset=8 + local.get $out + local.get $buffer|3 + local.get $byteOffset|4 + i32.add + i32.store offset=4 + local.get $out + br $"~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8>|inlined.0" + end + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $9 return ) - (func $~lib/typedarray/Uint64Array#toString (param $this i32) (result i32) - (local $1 i32) + (func $~lib/typedarray/Int8Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -58856,256 +58919,266 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $1 + block $2of2 + block $1of2 + block $0of2 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of2 $1of2 $2of2 $outOfRange + end + unreachable + end + i32.const 0 + local.set $byteOffset + end + i32.const -1 + local.set $length + end + local.get $buffer + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $3 i32.store - local.get $1 - i32.const 8560 - call $~lib/typedarray/Uint64Array#join - local.set $1 + local.get $3 + local.get $byteOffset + local.get $length + call $~lib/typedarray/Int8Array.wrap + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return + local.get $3 ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>" + (local $values i32) + (local $length i32) (local $array i32) - (local $1 i32) + (local $i i32) + (local $buffer i32) + (local $result i32) + (local $i|6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 + i32.const 24 + memory.fill global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Uint64Array#constructor - local.tee $array + global.get $std/typedarray/testArrayWrapValues + local.tee $values i32.store - local.get $array - local.set $1 + local.get $values + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 i32.store offset=4 - local.get $1 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 1 - call $~lib/typedarray/Uint64Array#__set - local.get $array - local.set $1 + local.get $length + call $~lib/typedarray/Int8Array#constructor + local.tee $array + i32.store offset=8 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.extend8_s + call $~lib/typedarray/Int8Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 1 - i64.const 2 - call $~lib/typedarray/Uint64Array#__set local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 2 - i64.const 3 - call $~lib/typedarray/Uint64Array#__set - local.get $array - local.set $1 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 i32.store offset=4 - local.get $1 - i32.const 3 - i64.const 4 - call $~lib/typedarray/Uint64Array#__set + local.get $7 local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - i64.const 5 - call $~lib/typedarray/Uint64Array#__set - i32.const 0 - drop + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - i32.const 8560 - call $~lib/typedarray/Uint64Array#join - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 8592 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 675 - i32.const 5 - call $~lib/builtins/abort - unreachable - end + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $~lib/typedarray/Uint64Array#toString - local.set $1 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.add + call $~lib/arraybuffer/ArrayBuffer#slice + local.tee $buffer + i32.store offset=16 + i32.const 1 + drop global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 i32.store offset=4 - local.get $1 - i32.const 8592 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 676 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $7 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array.wrap@varargs + local.tee $result + i32.store offset=20 + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Int8Array#__get + local.get $result + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Int8Array#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 730 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end end global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/string/joinFloatArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) - (local $lastIndex i32) - (local $sepLen i32) - (local $estLen i32) - (local $result i32) - (local $offset i32) - (local $value f32) + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>" + (local $values i32) + (local $length i32) + (local $array i32) (local $i i32) - (local $10 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + (local $buffer i32) + (local $result i32) + (local $i|6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $length - i32.const 1 + i32.const 24 i32.sub - local.set $lastIndex - local.get $lastIndex + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.lt_s - if - i32.const 6752 - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $lastIndex - i32.eqz - if - local.get $dataStart - f32.load - call $~lib/util/number/dtoa - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $separator - local.set $10 + i32.const 24 + memory.fill global.get $~lib/memory/__stack_pointer - local.get $10 + global.get $std/typedarray/testArrayWrapValues + local.tee $values i32.store - local.get $10 - call $~lib/string/String#get:length - local.set $sepLen - i32.const 28 - local.get $sepLen - i32.add - local.get $lastIndex - i32.mul - i32.const 28 - i32.add - local.set $estLen + local.get $values + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $estLen - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result + local.get $7 i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $offset + local.get $length + call $~lib/typedarray/Uint8Array#constructor + local.tee $array + i32.store offset=8 i32.const 0 local.set $i loop $for-loop|0 local.get $i - local.get $lastIndex + local.get $length i32.lt_s if - local.get $dataStart + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 local.get $i - i32.const 2 - i32.shl - i32.add - f32.load - local.set $value - local.get $offset - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $value - call $~lib/util/number/dtoa_buffered - i32.add - local.set $offset - local.get $sepLen - if - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $separator - local.get $sepLen - i32.const 1 - i32.shl - memory.copy - local.get $offset - local.get $sepLen - i32.add - local.set $offset - end + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.const 255 + i32.and + call $~lib/typedarray/Uint8Array#__set local.get $i i32.const 1 i32.add @@ -59113,121 +59186,115 @@ br $for-loop|0 end end - local.get $dataStart - local.get $lastIndex - i32.const 2 - i32.shl - i32.add - f32.load - local.set $value - local.get $offset - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $value - call $~lib/util/number/dtoa_buffered - i32.add - local.set $offset - local.get $estLen - local.get $offset - i32.gt_s - if - local.get $result - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store - local.get $10 - i32.const 0 - local.get $offset - call $~lib/string/String#substring - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $result - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - ) - (func $~lib/typedarray/Float32Array#join (param $this i32) (param $separator i32) (result i32) - (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $2 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $7 i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 + local.get $7 + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/typedarray/Float32Array#get:length - local.get $separator - local.set $2 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/string/joinFloatArray - local.set $2 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 8 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $~lib/typedarray/Float32Array#toString (param $this i32) (result i32) - (local $1 i32) + call $~lib/arraybuffer/ArrayBuffer#slice + local.tee $buffer + i32.store offset=16 + i32.const 0 + drop + i32.const 1 + drop global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $buffer + local.set $7 global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - i32.const 8560 - call $~lib/typedarray/Float32Array#join - local.set $1 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8Array.wrap@varargs + local.tee $result + i32.store offset=20 + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint8Array#__get + local.get $result + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint8Array#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 730 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end + end global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>" - (local $array i32) - (local $1 i32) + (func $~lib/typedarray/Uint8ClampedArray.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $buffer|3 i32) + (local $byteOffset|4 i32) + (local $len i32) + (local $byteLength i32) + (local $bufferByteLength i32) + (local $out i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -59239,226 +59306,228 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Float32Array#constructor - local.tee $array - i32.store - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - f32.const 1 - call $~lib/typedarray/Float32Array#__set - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 1 - f32.const 2 - call $~lib/typedarray/Float32Array#__set - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 2 - f32.const 3 - call $~lib/typedarray/Float32Array#__set - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 3 - f32.const 4 - call $~lib/typedarray/Float32Array#__set - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - f32.const 5 - call $~lib/typedarray/Float32Array#__set - i32.const 1 - drop - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - i32.const 8560 - call $~lib/typedarray/Float32Array#join - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 9776 - call $~lib/string/String.__eq - i32.eqz - if + block $"~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $buffer + local.tee $buffer|3 + i32.store + local.get $byteOffset + local.set $byteOffset|4 + local.get $length + local.set $len + local.get $buffer|3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bufferByteLength + local.get $byteOffset|4 + local.get $bufferByteLength + i32.gt_u + local.get $byteOffset|4 i32.const 0 - i32.const 544 - i32.const 672 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $~lib/typedarray/Float32Array#toString - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 9776 - call $~lib/string/String.__eq - i32.eqz - if + i32.and + i32.or + if + i32.const 336 + i32.const 608 + i32.const 1867 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $len i32.const 0 - i32.const 544 - i32.const 673 - i32.const 5 - call $~lib/builtins/abort - unreachable + i32.lt_s + if + local.get $len + i32.const -1 + i32.eq + if + local.get $bufferByteLength + i32.const 0 + i32.and + if + i32.const 32 + i32.const 608 + i32.const 1872 + i32.const 9 + call $~lib/builtins/abort + unreachable + end + local.get $bufferByteLength + local.get $byteOffset|4 + i32.sub + local.set $byteLength + else + i32.const 32 + i32.const 608 + i32.const 1876 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + else + local.get $len + i32.const 0 + i32.shl + local.set $byteLength + local.get $byteOffset|4 + local.get $byteLength + i32.add + local.get $bufferByteLength + i32.gt_s + if + i32.const 32 + i32.const 608 + i32.const 1881 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $out + local.get $buffer|3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buffer|3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $byteLength + i32.store offset=8 + local.get $out + local.get $buffer|3 + local.get $byteOffset|4 + i32.add + i32.store offset=4 + local.get $out + br $"~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" end + local.set $9 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $9 + return ) - (func $~lib/util/string/joinFloatArray (param $dataStart i32) (param $length i32) (param $separator i32) (result i32) - (local $lastIndex i32) - (local $sepLen i32) - (local $estLen i32) - (local $result i32) - (local $offset i32) - (local $value f64) - (local $i i32) - (local $10 i32) + (func $~lib/typedarray/Uint8ClampedArray.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $length - i32.const 1 - i32.sub - local.set $lastIndex - local.get $lastIndex i32.const 0 - i32.lt_s - if - i32.const 6752 - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $lastIndex - i32.eqz - if - local.get $dataStart - f64.load - call $~lib/util/number/dtoa - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return + i32.store + block $2of2 + block $1of2 + block $0of2 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of2 $1of2 $2of2 $outOfRange + end + unreachable + end + i32.const 0 + local.set $byteOffset + end + i32.const -1 + local.set $length end - local.get $separator - local.set $10 + local.get $buffer + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $3 i32.store - local.get $10 - call $~lib/string/String#get:length - local.set $sepLen - i32.const 28 - local.get $sepLen - i32.add - local.get $lastIndex - i32.mul - i32.const 28 + local.get $3 + local.get $byteOffset + local.get $length + call $~lib/typedarray/Uint8ClampedArray.wrap + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.set $estLen + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>" + (local $values i32) + (local $length i32) + (local $array i32) + (local $i i32) + (local $buffer i32) + (local $result i32) + (local $i|6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer - local.get $estLen - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + global.get $std/typedarray/testArrayWrapValues + local.tee $values + i32.store + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer i32.const 0 - local.set $offset + local.get $length + call $~lib/typedarray/Uint8ClampedArray#constructor + local.tee $array + i32.store offset=8 i32.const 0 local.set $i loop $for-loop|0 local.get $i - local.get $lastIndex + local.get $length i32.lt_s if - local.get $dataStart + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 local.get $i - i32.const 3 - i32.shl - i32.add - f64.load - local.set $value - local.get $offset - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $value - call $~lib/util/number/dtoa_buffered - i32.add - local.set $offset - local.get $sepLen - if - local.get $result - local.get $offset - i32.const 1 - i32.shl - i32.add - local.get $separator - local.get $sepLen - i32.const 1 - i32.shl - memory.copy - local.get $offset - local.get $sepLen - i32.add - local.set $offset - end + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.const 255 + i32.and + call $~lib/typedarray/Uint8ClampedArray#__set local.get $i i32.const 1 i32.add @@ -59466,94 +59535,248 @@ br $for-loop|0 end end - local.get $dataStart - local.get $lastIndex - i32.const 3 - i32.shl + global.get $~lib/memory/__stack_pointer + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.add - f64.load - local.set $value - local.get $offset - local.get $result - local.get $offset + call $~lib/arraybuffer/ArrayBuffer#slice + local.tee $buffer + i32.store offset=16 + i32.const 0 + drop + i32.const 0 + drop i32.const 1 - i32.shl - i32.add - local.get $value - call $~lib/util/number/dtoa_buffered - i32.add - local.set $offset - local.get $estLen - local.get $offset - i32.gt_s - if - local.get $result - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store - local.get $10 - i32.const 0 - local.get $offset - call $~lib/string/String#substring - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return + drop + global.get $~lib/memory/__stack_pointer + local.get $buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8ClampedArray.wrap@varargs + local.tee $result + i32.store offset=20 + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint8ClampedArray#__get + local.get $result + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint8ClampedArray#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 730 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end end - local.get $result - local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/typedarray/Float64Array#join (param $this i32) (param $separator i32) (result i32) - (local $2 i32) + (func $~lib/typedarray/Int16Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $buffer|3 i32) + (local $byteOffset|4 i32) + (local $len i32) + (local $byteLength i32) + (local $bufferByteLength i32) + (local $out i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/typedarray/Float64Array#get:length - local.get $separator - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/string/joinFloatArray - local.set $2 + i32.const 0 + i32.store offset=8 + block $"~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) + global.get $~lib/memory/__stack_pointer + local.get $buffer + local.tee $buffer|3 + i32.store + local.get $byteOffset + local.set $byteOffset|4 + local.get $length + local.set $len + local.get $buffer|3 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.set $bufferByteLength + local.get $byteOffset|4 + local.get $bufferByteLength + i32.gt_u + local.get $byteOffset|4 + i32.const 1 + i32.and + i32.or + if + i32.const 336 + i32.const 608 + i32.const 1867 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $len + i32.const 0 + i32.lt_s + if + local.get $len + i32.const -1 + i32.eq + if + local.get $bufferByteLength + i32.const 1 + i32.and + if + i32.const 32 + i32.const 608 + i32.const 1872 + i32.const 9 + call $~lib/builtins/abort + unreachable + end + local.get $bufferByteLength + local.get $byteOffset|4 + i32.sub + local.set $byteLength + else + i32.const 32 + i32.const 608 + i32.const 1876 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + else + local.get $len + i32.const 1 + i32.shl + local.set $byteLength + local.get $byteOffset|4 + local.get $byteLength + i32.add + local.get $bufferByteLength + i32.gt_s + if + i32.const 32 + i32.const 608 + i32.const 1881 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.const 7 + call $~lib/rt/itcms/__new + local.tee $out + i32.store offset=8 + local.get $out + local.get $buffer|3 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $out + local.get $buffer|3 + i32.const 0 + call $~lib/rt/itcms/__link + local.get $out + local.get $byteLength + i32.store offset=8 + local.get $out + local.get $buffer|3 + local.get $byteOffset|4 + i32.add + i32.store offset=4 + local.get $out + br $"~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16>|inlined.0" + end + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $9 return ) - (func $~lib/typedarray/Float64Array#toString (param $this i32) (result i32) - (local $1 i32) + (func $~lib/typedarray/Int16Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -59562,142 +59785,212 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $this - local.set $1 + block $2of2 + block $1of2 + block $0of2 + block $outOfRange + global.get $~argumentsLength + i32.const 1 + i32.sub + br_table $0of2 $1of2 $2of2 $outOfRange + end + unreachable + end + i32.const 0 + local.set $byteOffset + end + i32.const -1 + local.set $length + end + local.get $buffer + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $3 i32.store - local.get $1 - i32.const 8560 - call $~lib/typedarray/Float64Array#join - local.set $1 + local.get $3 + local.get $byteOffset + local.get $length + call $~lib/typedarray/Int16Array.wrap + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 - return + local.get $3 ) - (func $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>" + (local $values i32) + (local $length i32) (local $array i32) - (local $1 i32) + (local $i i32) + (local $buffer i32) + (local $result i32) + (local $i|6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 + i32.const 24 + memory.fill global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Float64Array#constructor - local.tee $array + global.get $std/typedarray/testArrayWrapValues + local.tee $values i32.store - local.get $array - local.set $1 + local.get $values + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 i32.store offset=4 - local.get $1 + local.get $7 + call $~lib/array/Array#get:length + local.set $length + global.get $~lib/memory/__stack_pointer i32.const 0 - f64.const 1 - call $~lib/typedarray/Float64Array#__set + local.get $length + call $~lib/typedarray/Int16Array#constructor + local.tee $array + i32.store offset=8 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.extend16_s + call $~lib/typedarray/Int16Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 i32.store offset=4 - local.get $1 - i32.const 1 - f64.const 2 - call $~lib/typedarray/Float64Array#__set + local.get $7 local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 2 - f64.const 3 - call $~lib/typedarray/Float64Array#__set + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 3 - f64.const 4 - call $~lib/typedarray/Float64Array#__set + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset local.get $array - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 4 - f64.const 5 - call $~lib/typedarray/Float64Array#__set + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.add + call $~lib/arraybuffer/ArrayBuffer#slice + local.tee $buffer + i32.store offset=16 + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop - local.get $array - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - i32.const 8560 - call $~lib/typedarray/Float64Array#join - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 9776 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 672 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $array - local.set $1 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - call $~lib/typedarray/Float64Array#toString - local.set $1 + local.get $buffer + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 i32.store offset=4 - local.get $1 - i32.const 9776 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 673 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $7 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int16Array.wrap@varargs + local.tee $result + i32.store offset=20 + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Int16Array#__get + local.get $result + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Int16Array#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 730 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end end global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint16Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -59716,7 +60009,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -59737,13 +60030,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 0 + i32.const 1 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -59757,12 +60050,12 @@ i32.eq if local.get $bufferByteLength - i32.const 0 + i32.const 1 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -59774,14 +60067,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 0 + i32.const 1 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -59792,7 +60085,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -59800,13 +60093,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 5 + i32.const 8 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -59820,7 +60117,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -59830,7 +60127,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint8Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint16Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -59865,7 +60162,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Uint8Array.wrap + call $~lib/typedarray/Uint16Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -59873,120 +60170,182 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $~lib/arraybuffer/ArrayBuffer#slice (param $this i32) (param $begin i32) (param $end i32) (result i32) + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>" + (local $values i32) (local $length i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) + (local $array i32) + (local $i i32) + (local $buffer i32) + (local $result i32) + (local $i|6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $outSize i32) - (local $out i32) - (local $16 i32) global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $16 + i32.const 0 + i32.const 24 + memory.fill global.get $~lib/memory/__stack_pointer - local.get $16 + global.get $std/typedarray/testArrayWrapValues + local.tee $values i32.store - local.get $16 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/array/Array#get:length local.set $length - local.get $begin + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.lt_s - if (result i32) - local.get $length - local.get $begin - i32.add - local.tee $4 - i32.const 0 - local.tee $5 - local.get $4 - local.get $5 - i32.gt_s - select - else - local.get $begin - local.tee $6 - local.get $length - local.tee $7 - local.get $6 - local.get $7 - i32.lt_s - select - end - local.set $begin - local.get $end + local.get $length + call $~lib/typedarray/Uint16Array#constructor + local.tee $array + i32.store offset=8 i32.const 0 - i32.lt_s - if (result i32) - local.get $length - local.get $end - i32.add - local.tee $8 - i32.const 0 - local.tee $9 - local.get $8 - local.get $9 - i32.gt_s - select - else - local.get $end - local.tee $10 + local.set $i + loop $for-loop|0 + local.get $i local.get $length - local.tee $11 - local.get $10 - local.get $11 i32.lt_s - select + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i + local.get $values + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + local.get $i + call $~lib/array/Array#__get + i32.const 65535 + i32.and + call $~lib/typedarray/Uint16Array#__set + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end end - local.set $end - local.get $end - local.get $begin - i32.sub - local.tee $12 - i32.const 0 - local.tee $13 - local.get $12 - local.get $13 - i32.gt_s - select - local.set $outSize global.get $~lib/memory/__stack_pointer - local.get $outSize - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $out + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 i32.store offset=4 - local.get $out - local.get $this - local.get $begin + local.get $7 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=12 + local.get $7 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.add - local.get $outSize - memory.copy - local.get $out - local.set $16 + call $~lib/arraybuffer/ArrayBuffer#slice + local.tee $buffer + i32.store offset=16 + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 1 + drop global.get $~lib/memory/__stack_pointer - i32.const 8 + local.get $buffer + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint16Array.wrap@varargs + local.tee $result + i32.store offset=20 + i32.const 0 + local.set $i|6 + loop $for-loop|1 + local.get $i|6 + local.get $length + i32.lt_s + if + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint16Array#__get + local.get $result + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=4 + local.get $7 + local.get $i|6 + call $~lib/typedarray/Uint16Array#__get + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 730 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $i|6 + i32.const 1 + i32.add + local.set $i|6 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer - local.get $16 - return ) - (func $~lib/typedarray/Int8Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Int32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -60005,7 +60364,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -60026,13 +60385,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 0 + i32.const 3 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -60046,12 +60405,12 @@ i32.eq if local.get $bufferByteLength - i32.const 0 + i32.const 3 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -60063,14 +60422,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 0 + i32.const 2 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -60081,7 +60440,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -60089,13 +60448,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 4 + i32.const 9 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -60109,7 +60472,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -60119,7 +60482,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int8Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Int32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -60154,7 +60517,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Int8Array.wrap + call $~lib/typedarray/Int32Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -60162,7 +60525,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>" (local $values i32) (local $length i32) (local $array i32) @@ -60195,7 +60558,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -60220,8 +60583,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend8_s - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Int32Array#__set local.get $i i32.const 1 i32.add @@ -60267,173 +60629,14 @@ call $~lib/arraybuffer/ArrayBuffer#slice local.tee $buffer i32.store offset=16 - i32.const 1 - drop - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int8Array.wrap@varargs - local.tee $result - i32.store offset=20 - i32.const 0 - local.set $i|6 - loop $for-loop|1 - local.get $i|6 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Int8Array#__get - local.get $result - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Int8Array#__get - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 730 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|6 - i32.const 1 - i32.add - local.set $i|6 - br $for-loop|1 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $i i32) - (local $buffer i32) - (local $result i32) - (local $i|6 i32) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + drop i32.const 0 - i32.const 24 - memory.fill - global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayWrapValues - local.tee $values - i32.store - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length - global.get $~lib/memory/__stack_pointer + drop i32.const 0 - local.get $length - call $~lib/typedarray/Uint8Array#constructor - local.tee $array - i32.store offset=8 + drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - local.get $i - call $~lib/array/Array#__get - i32.const 255 - i32.and - call $~lib/typedarray/Uint8Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - global.get $~lib/memory/__stack_pointer - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#slice - local.tee $buffer - i32.store offset=16 + drop i32.const 0 drop i32.const 1 @@ -60449,7 +60652,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8Array.wrap@varargs + call $~lib/typedarray/Int32Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -60466,7 +60669,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Int32Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -60474,7 +60677,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint8Array#__get + call $~lib/typedarray/Int32Array#__get i32.eq i32.eqz if @@ -60497,7 +60700,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -60516,7 +60719,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -60537,13 +60740,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 0 + i32.const 3 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -60557,12 +60760,12 @@ i32.eq if local.get $bufferByteLength - i32.const 0 + i32.const 3 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -60574,14 +60777,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 0 + i32.const 2 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -60592,7 +60795,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -60600,13 +60803,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 6 + i32.const 10 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -60620,7 +60827,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -60630,7 +60837,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint8ClampedArray.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -60665,7 +60872,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Uint8ClampedArray.wrap + call $~lib/typedarray/Uint32Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -60673,7 +60880,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>" (local $values i32) (local $length i32) (local $array i32) @@ -60706,7 +60913,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -60731,9 +60938,7 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 255 - i32.and - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Uint32Array#__set local.get $i i32.const 1 i32.add @@ -60783,6 +60988,14 @@ drop i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop global.get $~lib/memory/__stack_pointer @@ -60796,7 +61009,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray.wrap@varargs + call $~lib/typedarray/Uint32Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -60813,7 +61026,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Uint32Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -60821,7 +61034,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Uint32Array#__get i32.eq i32.eqz if @@ -60844,7 +61057,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Int64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -60863,7 +61076,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -60884,13 +61097,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 1 + i32.const 7 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -60904,12 +61117,12 @@ i32.eq if local.get $bufferByteLength - i32.const 1 + i32.const 7 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -60921,14 +61134,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 1 + i32.const 3 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -60939,7 +61152,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -60947,13 +61160,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 7 + i32.const 11 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -60967,7 +61184,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -60977,7 +61194,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int16Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Int64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61012,7 +61229,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Int16Array.wrap + call $~lib/typedarray/Int64Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61020,7 +61237,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>" (local $values i32) (local $length i32) (local $array i32) @@ -61053,7 +61270,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -61078,8 +61295,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.extend16_s - call $~lib/typedarray/Int16Array#__set + i64.extend_i32_s + call $~lib/typedarray/Int64Array#__set local.get $i i32.const 1 i32.add @@ -61131,6 +61348,14 @@ drop i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop global.get $~lib/memory/__stack_pointer @@ -61144,7 +61369,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array.wrap@varargs + call $~lib/typedarray/Int64Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -61161,7 +61386,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Int64Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -61169,8 +61394,8 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Int16Array#__get - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.eq i32.eqz if i32.const 0 @@ -61192,7 +61417,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -61211,7 +61436,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -61232,13 +61457,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 1 + i32.const 7 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -61252,12 +61477,12 @@ i32.eq if local.get $bufferByteLength - i32.const 1 + i32.const 7 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -61269,14 +61494,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 1 + i32.const 3 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -61287,7 +61512,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -61295,13 +61520,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 8 + i32.const 12 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -61315,7 +61544,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -61325,7 +61554,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint16Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Uint64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61360,7 +61589,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Uint16Array.wrap + call $~lib/typedarray/Uint64Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61368,7 +61597,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>" (local $values i32) (local $length i32) (local $array i32) @@ -61401,7 +61630,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -61426,9 +61655,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - i32.const 65535 - i32.and - call $~lib/typedarray/Uint16Array#__set + i64.extend_i32_s + call $~lib/typedarray/Uint64Array#__set local.get $i i32.const 1 i32.add @@ -61482,6 +61710,14 @@ drop i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop global.get $~lib/memory/__stack_pointer @@ -61495,7 +61731,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array.wrap@varargs + call $~lib/typedarray/Uint64Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -61512,7 +61748,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint16Array#__get + call $~lib/typedarray/Uint64Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -61520,8 +61756,8 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint16Array#__get - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.eq i32.eqz if i32.const 0 @@ -61543,7 +61779,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Float32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -61562,7 +61798,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -61589,7 +61825,7 @@ if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -61608,7 +61844,7 @@ if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -61620,7 +61856,7 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable @@ -61638,7 +61874,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -61646,13 +61882,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 9 + i32.const 13 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -61666,7 +61906,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -61676,7 +61916,7 @@ local.get $9 return ) - (func $~lib/typedarray/Int32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Float32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61711,7 +61951,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Int32Array.wrap + call $~lib/typedarray/Float32Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -61719,7 +61959,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>" (local $values i32) (local $length i32) (local $array i32) @@ -61752,7 +61992,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Float32Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -61777,7 +62017,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Int32Array#__set + f32.convert_i32_s + call $~lib/typedarray/Float32Array#__set local.get $i i32.const 1 i32.add @@ -61833,6 +62074,14 @@ drop i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop global.get $~lib/memory/__stack_pointer @@ -61846,7 +62095,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array.wrap@varargs + call $~lib/typedarray/Float32Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -61863,7 +62112,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Int32Array#__get + call $~lib/typedarray/Float32Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -61871,8 +62120,8 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Int32Array#__get - i32.eq + call $~lib/typedarray/Float32Array#__get + f32.eq i32.eqz if i32.const 0 @@ -61894,7 +62143,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Float64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $buffer|3 i32) (local $byteOffset|4 i32) (local $len i32) @@ -61913,7 +62162,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32>|inlined.0" (result i32) + block $"~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) global.get $~lib/memory/__stack_pointer local.get $buffer local.tee $buffer|3 @@ -61934,13 +62183,13 @@ local.get $bufferByteLength i32.gt_u local.get $byteOffset|4 - i32.const 3 + i32.const 7 i32.and i32.or if i32.const 336 i32.const 608 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -61954,12 +62203,12 @@ i32.eq if local.get $bufferByteLength - i32.const 3 + i32.const 7 i32.and if i32.const 32 i32.const 608 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -61971,14 +62220,14 @@ else i32.const 32 i32.const 608 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable end else local.get $len - i32.const 2 + i32.const 3 i32.shl local.set $byteLength local.get $byteOffset|4 @@ -61989,7 +62238,7 @@ if i32.const 32 i32.const 608 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -61997,13 +62246,17 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 10 + i32.const 14 call $~lib/rt/itcms/__new local.tee $out i32.store offset=8 local.get $out local.get $buffer|3 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $out local.get $buffer|3 i32.const 0 @@ -62017,7 +62270,7 @@ i32.add i32.store offset=4 local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32>|inlined.0" + br $"~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64>|inlined.0" end local.set $9 global.get $~lib/memory/__stack_pointer @@ -62027,7 +62280,7 @@ local.get $9 return ) - (func $~lib/typedarray/Uint32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) + (func $~lib/typedarray/Float64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -62062,7 +62315,7 @@ local.get $3 local.get $byteOffset local.get $length - call $~lib/typedarray/Uint32Array.wrap + call $~lib/typedarray/Float64Array.wrap local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -62070,7 +62323,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>" + (func $"std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>" (local $values i32) (local $length i32) (local $array i32) @@ -62103,7 +62356,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 local.get $length - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Float64Array#constructor local.tee $array i32.store offset=8 i32.const 0 @@ -62128,7 +62381,8 @@ local.get $7 local.get $i call $~lib/array/Array#__get - call $~lib/typedarray/Uint32Array#__set + f64.convert_i32_s + call $~lib/typedarray/Float64Array#__set local.get $i i32.const 1 i32.add @@ -62186,6 +62440,14 @@ drop i32.const 0 drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop i32.const 1 drop global.get $~lib/memory/__stack_pointer @@ -62199,7 +62461,7 @@ i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array.wrap@varargs + call $~lib/typedarray/Float64Array.wrap@varargs local.tee $result i32.store offset=20 i32.const 0 @@ -62216,7 +62478,7 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint32Array#__get + call $~lib/typedarray/Float64Array#__get local.get $result local.set $7 global.get $~lib/memory/__stack_pointer @@ -62224,8 +62486,8 @@ i32.store offset=4 local.get $7 local.get $i|6 - call $~lib/typedarray/Uint32Array#__get - i32.eq + call $~lib/typedarray/Float64Array#__get + f64.eq i32.eqz if i32.const 0 @@ -62247,14 +62509,17 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $buffer|3 i32) - (local $byteOffset|4 i32) - (local $len i32) - (local $byteLength i32) - (local $bufferByteLength i32) - (local $out i32) - (local $9 i32) + (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -62266,122 +62531,117 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.tee $buffer|3 - i32.store - local.get $byteOffset - local.set $byteOffset|4 - local.get $length - local.set $len - local.get $buffer|3 - local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bufferByteLength - local.get $byteOffset|4 - local.get $bufferByteLength - i32.gt_u - local.get $byteOffset|4 - i32.const 7 - i32.and - i32.or - if - i32.const 336 - i32.const 608 - i32.const 1860 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $len - i32.const 0 + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 0 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:dataStart + local.set $sourceStart + i32.const 0 + i32.const 2 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen i32.lt_s if - local.get $len - i32.const -1 - i32.eq - if - local.get $bufferByteLength - i32.const 7 - i32.and - if - i32.const 32 - i32.const 608 - i32.const 1865 - i32.const 9 - call $~lib/builtins/abort - unreachable - end - local.get $bufferByteLength - local.get $byteOffset|4 - i32.sub - local.set $byteLength - else - i32.const 32 - i32.const 608 - i32.const 1869 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - else - local.get $len - i32.const 3 + local.get $targetStart + local.get $i + i32.const 0 i32.shl - local.set $byteLength - local.get $byteOffset|4 - local.get $byteLength i32.add - local.get $bufferByteLength - i32.gt_s - if - i32.const 32 - i32.const 608 - i32.const 1874 - i32.const 7 - call $~lib/builtins/abort - unreachable - end + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 11 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 - local.get $out - local.get $buffer|3 - i32.store - local.get $out - local.get $buffer|3 - i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $byteLength - i32.store offset=8 - local.get $out - local.get $buffer|3 - local.get $byteOffset|4 - i32.add - i32.store offset=4 - local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64>|inlined.0" end - local.set $9 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $9 - return ) - (func $~lib/typedarray/Int64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $3 i32) + (func $~lib/typedarray/Int8Array#__uget (param $this i32) (param $index i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -62390,99 +62650,145 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $2of2 - block $1of2 - block $0of2 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of2 $1of2 $2of2 $outOfRange - end - unreachable - end - i32.const 0 - local.set $byteOffset - end - i32.const -1 - local.set $length - end - local.get $buffer - local.set $3 + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store - local.get $3 - local.get $byteOffset - local.get $length - call $~lib/typedarray/Int64Array.wrap - local.set $3 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $index + i32.add + i32.load8_s + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $2 + return ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $i i32) - (local $buffer i32) - (local $result i32) - (local $i|6 i32) - (local $7 i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 24 - memory.fill + i32.store + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayWrapValues - local.tee $values + local.get $2 i32.store - local.get $values - local.set $7 + local.get $2 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> (param $target i32) (param $compare i32) + (local $len i32) + (local $i i32) + (local $vala i32) + (local $valb i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - local.get $length - call $~lib/typedarray/Int64Array#constructor - local.tee $array - i32.store offset=8 + i32.store + local.get $target + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/typedarray/Int8Array#get:length + local.set $len + local.get $len + local.get $compare + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + call $~lib/array/Array#get:length + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 758 + i32.const 3 + call $~lib/builtins/abort + unreachable + end i32.const 0 local.set $i loop $for-loop|0 local.get $i - local.get $length + local.get $len i32.lt_s if - local.get $array - local.set $7 + local.get $target + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 + local.get $6 + i32.store + local.get $6 local.get $i - local.get $values - local.set $7 + call $~lib/typedarray/Int8Array#__uget + local.set $vala + local.get $compare + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 + local.get $6 + i32.store + local.get $6 local.get $i - call $~lib/array/Array#__get - i64.extend_i32_s - call $~lib/typedarray/Int64Array#__set + call $~lib/array/Array#__uget + local.set $valb + local.get $vala + local.get $valb + i32.ne + if + i32.const 10320 + i32.const 3 + local.get $i + f64.convert_i32_s + local.get $vala + f64.convert_i32_s + local.get $valb + f64.convert_i32_s + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 764 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end local.get $i i32.const 1 i32.add @@ -62491,126 +62797,188 @@ end end global.get $~lib/memory/__stack_pointer - local.get $array - local.set $7 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $7 + i32.const 0 + i32.store + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $array - local.set $7 + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value f32) + (local $12 i32) global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#slice - local.tee $buffer - i32.store offset=16 - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop i32.const 0 - drop + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 i32.const 0 drop - i32.const 1 - drop + local.get $source|4 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $buffer - local.set $7 + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 i32.const 0 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:dataStart + local.set $sourceStart i32.const 1 - global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int64Array.wrap@varargs - local.tee $result - i32.store offset=20 + i32.eq + drop i32.const 0 - local.set $i|6 - loop $for-loop|1 - local.get $i|6 - local.get $length + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen i32.lt_s if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Int64Array#__get - local.get $result - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Int64Array#__get - i64.eq + local.get $targetStart + local.get $i + i32.const 0 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 2 + i32.shl + i32.add + f32.load + local.set $value + i32.const 0 + drop + i32.const 0 i32.eqz - if + drop + local.get $ptr + local.get $value + local.get $value + f32.sub + f32.const 0 + f32.eq + if (result i32) + local.get $value + i32.trunc_sat_f32_s + else i32.const 0 - i32.const 544 - i32.const 730 - i32.const 5 - call $~lib/builtins/abort - unreachable end - local.get $i|6 + i32.store8 + local.get $i i32.const 1 i32.add - local.set $i|6 - br $for-loop|1 + local.set $i + br $for-loop|0 end end global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $buffer|3 i32) - (local $byteOffset|4 i32) - (local $len i32) - (local $byteLength i32) - (local $bufferByteLength i32) - (local $out i32) - (local $9 i32) + (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i64) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -62622,122 +62990,118 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.tee $buffer|3 - i32.store - local.get $byteOffset - local.set $byteOffset|4 - local.get $length - local.set $len - local.get $buffer|3 - local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int64Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bufferByteLength - local.get $byteOffset|4 - local.get $bufferByteLength - i32.gt_u - local.get $byteOffset|4 - i32.const 7 - i32.and - i32.or - if - i32.const 336 - i32.const 608 - i32.const 1860 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $len - i32.const 0 + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 0 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart + i32.const 0 + i32.const 3 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen i32.lt_s if - local.get $len - i32.const -1 - i32.eq - if - local.get $bufferByteLength - i32.const 7 - i32.and - if - i32.const 32 - i32.const 608 - i32.const 1865 - i32.const 9 - call $~lib/builtins/abort - unreachable - end - local.get $bufferByteLength - local.get $byteOffset|4 - i32.sub - local.set $byteLength - else - i32.const 32 - i32.const 608 - i32.const 1869 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - else - local.get $len + local.get $targetStart + local.get $i + i32.const 0 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i i32.const 3 i32.shl - local.set $byteLength - local.get $byteOffset|4 - local.get $byteLength i32.add - local.get $bufferByteLength - i32.gt_s - if - i32.const 32 - i32.const 608 - i32.const 1874 - i32.const 7 - call $~lib/builtins/abort - unreachable - end + i64.load + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.wrap_i64 + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 12 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 - local.get $out - local.get $buffer|3 - i32.store - local.get $out - local.get $buffer|3 - i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $byteLength - i32.store offset=8 - local.get $out - local.get $buffer|3 - local.get $byteOffset|4 - i32.add - i32.store offset=4 - local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64>|inlined.0" end - local.set $9 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $9 - return ) - (func $~lib/typedarray/Uint64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $3 i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -62746,99 +63110,151 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $2of2 - block $1of2 - block $0of2 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of2 $1of2 $2of2 $outOfRange - end - unreachable - end - i32.const 0 - local.set $byteOffset - end - i32.const -1 - local.set $length - end - local.get $buffer - local.set $3 + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $1 i32.store - local.get $3 - local.get $byteOffset - local.get $length - call $~lib/typedarray/Uint64Array.wrap - local.set $3 + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $1 + return ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>" - (local $values i32) - (local $length i32) - (local $array i32) + (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) (local $i i32) - (local $buffer i32) - (local $result i32) - (local $i|6 i32) - (local $7 i32) + (local $ptr i32) + (local $value f64) + (local $12 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 24 - memory.fill + i32.store offset=8 global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayWrapValues - local.tee $values + local.get $this + local.tee $target i32.store - local.get $values - local.set $7 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 i32.const 0 - local.get $length - call $~lib/typedarray/Uint64Array#constructor - local.tee $array + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:dataStart + local.set $sourceStart + i32.const 1 + i32.const 0 + i32.eq + drop i32.const 0 local.set $i loop $for-loop|0 local.get $i - local.get $length + local.get $sourceLen i32.lt_s if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 + local.get $targetStart local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 + i32.const 0 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart local.get $i - call $~lib/array/Array#__get - i64.extend_i32_s - call $~lib/typedarray/Uint64Array#__set + i32.const 3 + i32.shl + i32.add + f64.load + local.set $value + i32.const 0 + drop + i32.const 0 + i32.eqz + drop + local.get $ptr + local.get $value + local.get $value + f64.sub + f64.const 0 + f64.eq + if (result i32) + local.get $value + i32.trunc_sat_f64_s + else + i32.const 0 + end + i32.store8 local.get $i i32.const 1 i32.add @@ -62847,128 +63263,120 @@ end end global.get $~lib/memory/__stack_pointer - local.get $array - local.set $7 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $7 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $array - local.set $7 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + i32.const 0 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + local.get $this + local.tee $target + i32.store global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#slice - local.tee $buffer - i32.store offset=16 - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 i32.const 0 drop - i32.const 1 - drop + local.get $source|4 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $buffer - local.set $7 + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/typedarray/Uint8Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 i32.const 0 - i32.const 1 - global.set $~argumentsLength + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart i32.const 0 - call $~lib/typedarray/Uint64Array.wrap@varargs - local.tee $result - i32.store offset=20 + i32.eqz + drop + local.get $targetStart + local.get $sourceStart + local.get $sourceLen i32.const 0 - local.set $i|6 - loop $for-loop|1 - local.get $i|6 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Uint64Array#__get - local.get $result - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Uint64Array#__get - i64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 730 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|6 - i32.const 1 - i32.add - local.set $i|6 - br $for-loop|1 - end - end + i32.shl + memory.copy global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $buffer|3 i32) - (local $byteOffset|4 i32) - (local $len i32) - (local $byteLength i32) - (local $bufferByteLength i32) - (local $out i32) - (local $9 i32) + (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -62980,172 +63388,225 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.tee $buffer|3 - i32.store - local.get $byteOffset - local.set $byteOffset|4 - local.get $length - local.set $len - local.get $buffer|3 - local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int16Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bufferByteLength - local.get $byteOffset|4 - local.get $bufferByteLength - i32.gt_u - local.get $byteOffset|4 - i32.const 3 - i32.and - i32.or - if - i32.const 336 - i32.const 608 - i32.const 1860 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $len - i32.const 0 + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 0 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart + i32.const 0 + i32.const 1 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen i32.lt_s if - local.get $len - i32.const -1 - i32.eq - if - local.get $bufferByteLength - i32.const 3 - i32.and - if - i32.const 32 - i32.const 608 - i32.const 1865 - i32.const 9 - call $~lib/builtins/abort - unreachable - end - local.get $bufferByteLength - local.get $byteOffset|4 - i32.sub - local.set $byteLength - else - i32.const 32 - i32.const 608 - i32.const 1869 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - else - local.get $len - i32.const 2 + local.get $targetStart + local.get $i + i32.const 0 i32.shl - local.set $byteLength - local.get $byteOffset|4 - local.get $byteLength i32.add - local.get $bufferByteLength - i32.gt_s - if - i32.const 32 - i32.const 608 - i32.const 1874 - i32.const 7 - call $~lib/builtins/abort - unreachable - end + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 13 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 - local.get $out - local.get $buffer|3 - i32.store - local.get $out - local.get $buffer|3 - i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $byteLength - i32.store offset=8 - local.get $out - local.get $buffer|3 - local.get $byteOffset|4 - i32.add - i32.store offset=4 - local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32>|inlined.0" end - local.set $9 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $9 - return ) - (func $~lib/typedarray/Float32Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $3 i32) + (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target i32.store - block $2of2 - block $1of2 - block $0of2 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of2 $1of2 $2of2 $outOfRange - end - unreachable - end - i32.const 0 - local.set $byteOffset - end - i32.const -1 - local.set $length + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/array/Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/typedarray/Int8Array#get:length + i32.gt_s end - local.get $buffer - local.set $3 + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - local.get $byteOffset - local.get $length - call $~lib/typedarray/Float32Array.wrap - local.set $3 + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 0 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 + local.get $9 + i32.store offset=8 + local.get $9 + call $~lib/array/Array#get:dataStart + local.set $sourceStart + i32.const 0 + i32.eqz + drop + local.get $targetStart + local.get $sourceStart + local.get $sourceLen + i32.const 0 + i32.shl + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $i i32) - (local $buffer i32) - (local $result i32) - (local $i|6 i32) + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array> + (local $setSource4 i32) + (local $setSource5 i32) + (local $setSource6 i32) + (local $a i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) (local $7 i32) + (local $8 i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 24 i32.sub @@ -63156,534 +63617,312 @@ i32.const 24 memory.fill global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayWrapValues - local.tee $values + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int64Array#constructor + local.tee $setSource4 i32.store - local.get $values - local.set $7 + local.get $setSource4 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length + local.get $9 + i32.const 0 + i64.const 7 + call $~lib/typedarray/Int64Array#__set + local.get $setSource4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 1 + i64.const 8 + call $~lib/typedarray/Int64Array#__set + local.get $setSource4 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 2 + i64.const 9 + call $~lib/typedarray/Int64Array#__set global.get $~lib/memory/__stack_pointer i32.const 0 - local.get $length - call $~lib/typedarray/Float32Array#constructor - local.tee $array + i32.const 4 + call $~lib/typedarray/Uint8Array#constructor + local.tee $setSource5 i32.store offset=8 - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - local.get $i - call $~lib/array/Array#__get - f32.convert_i32_s - call $~lib/typedarray/Float32Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end + local.get $setSource5 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $array - local.set $7 + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 0 + i32.const 100 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $7 + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 1 + i32.const 101 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 i32.store offset=4 - local.get $7 - local.get $array - local.set $7 + local.get $9 + i32.const 2 + i32.const 102 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 3 + i32.const 103 + call $~lib/typedarray/Uint8Array#__set global.get $~lib/memory/__stack_pointer - local.get $7 + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int16Array#constructor + local.tee $setSource6 i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + local.get $setSource6 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#slice - local.tee $buffer - i32.store offset=16 - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop + local.get $9 + i32.store offset=4 + local.get $9 i32.const 0 - drop - i32.const 1 - drop - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.set $7 + i32.const 1000 + call $~lib/typedarray/Int16Array#__set + local.get $setSource6 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 i32.store offset=4 - local.get $7 - i32.const 0 + local.get $9 i32.const 1 - global.set $~argumentsLength + i32.const 1001 + call $~lib/typedarray/Int16Array#__set + local.get $setSource6 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 2 + i32.const 1002 + call $~lib/typedarray/Int16Array#__set + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/typedarray/Float32Array.wrap@varargs - local.tee $result + i32.const 10 + call $~lib/typedarray/Int8Array#constructor + local.tee $a + i32.store offset=16 + local.get $a + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + global.get $std/typedarray/setSource1 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store offset=20 + local.get $9 i32.const 0 - local.set $i|6 - loop $for-loop|1 - local.get $i|6 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Float32Array#__get - local.get $result - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Float32Array#__get - f32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 730 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|6 - i32.const 1 - i32.add - local.set $i|6 - br $for-loop|1 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Float64Array.wrap (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $buffer|3 i32) - (local $byteOffset|4 i32) - (local $len i32) - (local $byteLength i32) - (local $bufferByteLength i32) - (local $out i32) - (local $9 i32) + call $~lib/typedarray/Int8Array#set<~lib/array/Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 10 + i32.const 0 + i32.const 16 + i32.const 10288 + call $~lib/rt/__newArray + local.set $9 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $9 + i32.store offset=20 + local.get $9 + call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $"~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64>|inlined.0" (result i32) - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.tee $buffer|3 - i32.store - local.get $byteOffset - local.set $byteOffset|4 - local.get $length - local.set $len - local.get $buffer|3 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - call $~lib/arraybuffer/ArrayBuffer#get:byteLength - local.set $bufferByteLength - local.get $byteOffset|4 - local.get $bufferByteLength - i32.gt_u - local.get $byteOffset|4 - i32.const 7 - i32.and - i32.or - if - i32.const 336 - i32.const 608 - i32.const 1860 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $len - i32.const 0 - i32.lt_s - if - local.get $len - i32.const -1 - i32.eq - if - local.get $bufferByteLength - i32.const 7 - i32.and - if - i32.const 32 - i32.const 608 - i32.const 1865 - i32.const 9 - call $~lib/builtins/abort - unreachable - end - local.get $bufferByteLength - local.get $byteOffset|4 - i32.sub - local.set $byteLength - else - i32.const 32 - i32.const 608 - i32.const 1869 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - else - local.get $len - i32.const 3 - i32.shl - local.set $byteLength - local.get $byteOffset|4 - local.get $byteLength - i32.add - local.get $bufferByteLength - i32.gt_s - if - i32.const 32 - i32.const 608 - i32.const 1874 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.const 14 - call $~lib/rt/itcms/__new - local.tee $out - i32.store offset=8 - local.get $out - local.get $buffer|3 - i32.store - local.get $out - local.get $buffer|3 - i32.const 0 - call $~lib/rt/itcms/__link - local.get $out - local.get $byteLength - i32.store offset=8 - local.get $out - local.get $buffer|3 - local.get $byteOffset|4 - i32.add - i32.store offset=4 - local.get $out - br $"~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64>|inlined.0" - end + local.get $9 + i32.store offset=4 + local.get $9 + global.get $std/typedarray/setSource2 local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer local.get $9 - return - ) - (func $~lib/typedarray/Float64Array.wrap@varargs (param $buffer i32) (param $byteOffset i32) (param $length i32) (result i32) - (local $3 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + i32.store offset=20 + local.get $9 + i32.const 3 + call $~lib/typedarray/Int8Array#set<~lib/array/Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 10 i32.const 0 - i32.store - block $2of2 - block $1of2 - block $0of2 - block $outOfRange - global.get $~argumentsLength - i32.const 1 - i32.sub - br_table $0of2 $1of2 $2of2 $outOfRange - end - unreachable - end - i32.const 0 - local.set $byteOffset - end - i32.const -1 - local.set $length - end - local.get $buffer - local.set $3 + i32.const 16 + i32.const 10368 + call $~lib/rt/__newArray + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - local.get $3 - local.get $byteOffset - local.get $length - call $~lib/typedarray/Float64Array.wrap - local.set $3 + local.get $9 + i32.store offset=20 + local.get $9 + call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - ) - (func $"std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>" - (local $values i32) - (local $length i32) - (local $array i32) - (local $i i32) - (local $buffer i32) - (local $result i32) - (local $i|6 i32) - (local $7 i32) + local.get $9 + i32.store offset=4 + local.get $9 + local.get $setSource4 + local.set $9 global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 6 + call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 10 i32.const 0 - i32.const 24 - memory.fill + i32.const 16 + i32.const 10400 + call $~lib/rt/__newArray + local.set $9 global.get $~lib/memory/__stack_pointer - global.get $std/typedarray/testArrayWrapValues - local.tee $values - i32.store - local.get $values - local.set $7 + local.get $9 + i32.store offset=20 + local.get $9 + call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + i32.const 1 + drop + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 i32.store offset=4 - local.get $7 - call $~lib/array/Array#get:length - local.set $length + local.get $9 + global.get $std/typedarray/setSource3 + local.set $9 global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 2 + call $~lib/typedarray/Int8Array#set<~lib/array/Array> + local.get $a + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + i32.const 10 i32.const 0 - local.get $length - call $~lib/typedarray/Float64Array#constructor - local.tee $array - i32.store offset=8 - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i - local.get $values - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - local.get $i - call $~lib/array/Array#__get - f64.convert_i32_s - call $~lib/typedarray/Float64Array#__set - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end + i32.const 16 + i32.const 10432 + call $~lib/rt/__newArray + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $array - local.set $7 + local.get $9 + i32.store offset=20 + local.get $9 + call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:buffer - local.set $7 + local.get $9 + i32.store offset=4 + local.get $9 + local.get $setSource5 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 0 + call $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> + local.get $a + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store offset=4 - local.get $7 - local.get $array - local.set $7 + local.get $9 + local.get $setSource6 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 4 + call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $array - local.set $7 + local.get $9 + i32.store offset=4 + local.get $9 + global.get $std/typedarray/setSource7 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=12 - local.get $7 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.add - call $~lib/arraybuffer/ArrayBuffer#slice - local.tee $buffer - i32.store offset=16 - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop - i32.const 0 - drop + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 7 + call $~lib/typedarray/Int8Array#set<~lib/array/Array> i32.const 0 drop - i32.const 1 - drop - global.get $~lib/memory/__stack_pointer - local.get $buffer - local.set $7 + local.get $a + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $7 + local.get $9 i32.store offset=4 - local.get $7 - i32.const 0 - i32.const 1 - global.set $~argumentsLength + local.get $9 + i32.const 10 i32.const 0 - call $~lib/typedarray/Float64Array.wrap@varargs - local.tee $result + i32.const 16 + i32.const 10464 + call $~lib/rt/__newArray + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 i32.store offset=20 - i32.const 0 - local.set $i|6 - loop $for-loop|1 - local.get $i|6 - local.get $length - i32.lt_s - if - local.get $array - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Float64Array#__get - local.get $result - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - local.get $i|6 - call $~lib/typedarray/Float64Array#__get - f64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 730 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $i|6 - i32.const 1 - i32.add - local.set $i|6 - br $for-loop|1 - end - end + local.get $9 + call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -63740,13 +63979,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -63814,7 +64053,32 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Uint8Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -63833,7 +64097,7 @@ call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index i32.add - i32.load8_s + i32.load8_u local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -63842,7 +64106,7 @@ local.get $2 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -63858,12 +64122,12 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index i32.const 0 i32.shl i32.add - i32.load8_s + i32.load8_u local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -63872,7 +64136,7 @@ local.get $2 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -63892,7 +64156,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length local.set $len local.get $len local.get $compare @@ -63901,7 +64165,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -63926,7 +64190,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Int8Array#__uget + call $~lib/typedarray/Uint8Array#__uget local.set $vala local.get $compare local.set $6 @@ -63935,20 +64199,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i32.ne if - i32.const 10320 + i32.const 10528 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_s + f64.convert_i32_u local.get $valb - f64.convert_i32_s + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -63975,32 +64239,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64057,13 +64296,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64125,7 +64364,7 @@ f32.eq if (result i32) local.get $value - i32.trunc_sat_f32_s + i32.trunc_sat_f32_u else i32.const 0 end @@ -64142,7 +64381,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64199,13 +64438,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64274,32 +64513,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64356,13 +64570,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64424,7 +64638,7 @@ f64.eq if (result i32) local.get $value - i32.trunc_sat_f64_s + i32.trunc_sat_f64_u else i32.const 0 end @@ -64441,7 +64655,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64495,13 +64709,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64540,7 +64754,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64597,13 +64811,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64671,7 +64885,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -64725,13 +64939,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint8Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -64770,7 +64984,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -64901,7 +65115,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Uint8Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -64917,7 +65131,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -64926,15 +65140,15 @@ local.get $9 i32.const 10 i32.const 0 - i32.const 16 - i32.const 10288 + i32.const 64 + i32.const 10496 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -64948,7 +65162,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Int8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -64957,15 +65171,15 @@ local.get $9 i32.const 10 i32.const 0 - i32.const 16 - i32.const 10368 + i32.const 64 + i32.const 10576 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -64979,7 +65193,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -64988,15 +65202,15 @@ local.get $9 i32.const 10 i32.const 0 - i32.const 16 - i32.const 10400 + i32.const 64 + i32.const 10608 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> i32.const 1 drop local.get $a @@ -65012,7 +65226,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Int8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -65021,15 +65235,15 @@ local.get $9 i32.const 10 i32.const 0 - i32.const 16 - i32.const 10432 + i32.const 64 + i32.const 10640 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -65043,7 +65257,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -65057,7 +65271,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -65071,7 +65285,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Int8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -65082,21 +65296,21 @@ local.get $9 i32.const 10 i32.const 0 - i32.const 16 - i32.const 10464 + i32.const 64 + i32.const 10672 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65153,13 +65367,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -65208,12 +65422,31 @@ i32.add i32.load local.set $value - i32.const 0 + i32.const 1 drop i32.const 0 drop + i32.const 1 + i32.eqz + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $ptr local.get $value + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + i32.const 255 + local.get $value + i32.sub + i32.const 31 + i32.shr_s + local.get $value + i32.or + i32.and i32.store8 local.get $i i32.const 1 @@ -65227,32 +65460,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint8Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/typedarray/Uint8ClampedArray#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -65280,37 +65488,7 @@ local.get $2 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:dataStart - local.get $index - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -65330,7 +65508,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length local.set $len local.get $len local.get $compare @@ -65364,7 +65542,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Uint8Array#__uget + call $~lib/typedarray/Uint8ClampedArray#__uget local.set $vala local.get $compare local.set $6 @@ -65379,7 +65557,7 @@ local.get $valb i32.ne if - i32.const 10528 + i32.const 10736 i32.const 3 local.get $i f64.convert_i32_s @@ -65413,7 +65591,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65470,13 +65648,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -65525,10 +65703,9 @@ i32.add f32.load local.set $value - i32.const 0 + i32.const 1 drop - i32.const 0 - i32.eqz + i32.const 1 drop local.get $ptr local.get $value @@ -65537,7 +65714,11 @@ f32.const 0 f32.eq if (result i32) + f32.const 0 + f32.const 255 local.get $value + f32.min + f32.max i32.trunc_sat_f32_u else i32.const 0 @@ -65555,7 +65736,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65612,13 +65793,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -65667,14 +65848,36 @@ i32.add i64.load local.set $value - i32.const 0 + i32.const 1 drop i32.const 0 drop + i32.const 1 + i32.eqz + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $ptr local.get $value i32.wrap_i64 - i32.store8 + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + i64.extend_i32_s + i32.const 255 + local.get $value + i32.wrap_i64 + i32.sub + i32.const 31 + i32.shr_s + i64.extend_i32_s + local.get $value + i64.or + i64.and + i64.store8 local.get $i i32.const 1 i32.add @@ -65687,7 +65890,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65744,13 +65947,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -65799,10 +66002,9 @@ i32.add f64.load local.set $value - i32.const 0 + i32.const 1 drop - i32.const 0 - i32.eqz + i32.const 1 drop local.get $ptr local.get $value @@ -65811,7 +66013,11 @@ f64.const 0 f64.eq if (result i32) + f64.const 0 + f64.const 255 local.get $value + f64.min + f64.max i32.trunc_sat_f64_u else i32.const 0 @@ -65829,7 +66035,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65883,13 +66089,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -65928,7 +66134,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -65985,13 +66191,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -66040,12 +66246,31 @@ i32.add i32.load16_s local.set $value - i32.const 0 + i32.const 1 drop i32.const 0 drop + i32.const 1 + i32.eqz + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $ptr local.get $value + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + i32.const 255 + local.get $value + i32.sub + i32.const 31 + i32.shr_s + local.get $value + i32.or + i32.and i32.store8 local.get $i i32.const 1 @@ -66059,14 +66284,17 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $9 i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -66091,11 +66319,11 @@ i32.const 0 drop local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/array/Array#get:length local.set $sourceLen local.get $offset|5 @@ -66108,28 +66336,28 @@ local.get $offset|5 i32.add local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Uint8Array#get:length + local.get $12 + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 i32.const 0 @@ -66137,28 +66365,75 @@ i32.add local.set $targetStart local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 0 + i32.const 1 i32.eqz drop - local.get $targetStart - local.get $sourceStart - local.get $sourceLen i32.const 0 - i32.shl - memory.copy + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 0 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.set $value + i32.const 1 + drop + i32.const 0 + drop + i32.const 1 + i32.eqz + drop + i32.const 1 + i32.const 4 + i32.le_u + drop + local.get $ptr + local.get $value + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + i32.const 255 + local.get $value + i32.sub + i32.const 31 + i32.shr_s + local.get $value + i32.or + i32.and + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -66289,7 +66564,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Uint8Array#constructor + call $~lib/typedarray/Uint8ClampedArray#constructor local.tee $a i32.store offset=16 local.get $a @@ -66305,7 +66580,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66315,14 +66590,14 @@ i32.const 10 i32.const 0 i32.const 64 - i32.const 10496 + i32.const 10704 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66336,7 +66611,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Uint8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66346,14 +66621,14 @@ i32.const 10 i32.const 0 i32.const 64 - i32.const 10576 + i32.const 10800 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66367,7 +66642,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66377,14 +66652,14 @@ i32.const 10 i32.const 0 i32.const 64 - i32.const 10608 + i32.const 10832 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> i32.const 1 drop local.get $a @@ -66400,7 +66675,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Uint8Array#set<~lib/array/Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66410,14 +66685,14 @@ i32.const 10 i32.const 0 i32.const 64 - i32.const 10640 + i32.const 10864 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66431,7 +66706,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66445,7 +66720,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -66459,8 +66734,8 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Uint8Array#set<~lib/array/Array> - i32.const 0 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> + i32.const 1 drop local.get $a local.set $9 @@ -66471,20 +66746,20 @@ i32.const 10 i32.const 0 i32.const 64 - i32.const 10672 + i32.const 10896 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -66541,13 +66816,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -66560,7 +66835,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart @@ -66572,7 +66847,7 @@ local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 0 + i32.const 1 i32.const 2 i32.eq drop @@ -66585,7 +66860,7 @@ if local.get $targetStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add local.set $ptr @@ -66596,32 +66871,13 @@ i32.add i32.load local.set $value - i32.const 1 - drop i32.const 0 drop - i32.const 1 - i32.eqz - drop - i32.const 1 - i32.const 4 - i32.le_u + i32.const 0 drop local.get $ptr local.get $value - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - i32.const 255 - local.get $value - i32.sub - i32.const 31 - i32.shr_s - local.get $value - i32.or - i32.and - i32.store8 + i32.store16 local.get $i i32.const 1 i32.add @@ -66634,7 +66890,32 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Int16Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -66652,8 +66933,10 @@ local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index + i32.const 1 + i32.shl i32.add - i32.load8_u + i32.load16_s local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -66662,7 +66945,37 @@ local.get $2 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> (param $target i32) (param $compare i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:dataStart + local.get $index + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -66682,7 +66995,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length local.set $len local.get $len local.get $compare @@ -66691,7 +67004,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -66716,7 +67029,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Uint8ClampedArray#__uget + call $~lib/typedarray/Int16Array#__uget local.set $vala local.get $compare local.set $6 @@ -66725,20 +67038,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i32.ne if - i32.const 10736 + i32.const 10976 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_u + f64.convert_i32_s local.get $valb - f64.convert_i32_u + f64.convert_i32_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -66765,7 +67078,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -66822,13 +67135,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -66841,7 +67154,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart @@ -66866,7 +67179,7 @@ if local.get $targetStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add local.set $ptr @@ -66877,9 +67190,10 @@ i32.add f32.load local.set $value - i32.const 1 + i32.const 0 drop - i32.const 1 + i32.const 0 + i32.eqz drop local.get $ptr local.get $value @@ -66888,16 +67202,12 @@ f32.const 0 f32.eq if (result i32) - f32.const 0 - f32.const 255 local.get $value - f32.min - f32.max - i32.trunc_sat_f32_u + i32.trunc_sat_f32_s else i32.const 0 end - i32.store8 + i32.store16 local.get $i i32.const 1 i32.add @@ -66910,7 +67220,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -66967,13 +67277,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -66986,7 +67296,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart @@ -66998,7 +67308,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 0 + i32.const 1 i32.const 3 i32.eq drop @@ -67011,7 +67321,7 @@ if local.get $targetStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add local.set $ptr @@ -67022,36 +67332,14 @@ i32.add i64.load local.set $value - i32.const 1 - drop i32.const 0 drop - i32.const 1 - i32.eqz - drop - i32.const 1 - i32.const 4 - i32.le_u + i32.const 0 drop local.get $ptr local.get $value i32.wrap_i64 - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - i64.extend_i32_s - i32.const 255 - local.get $value - i32.wrap_i64 - i32.sub - i32.const 31 - i32.shr_s - i64.extend_i32_s - local.get $value - i64.or - i64.and - i64.store8 + i32.store16 local.get $i i32.const 1 i32.add @@ -67064,7 +67352,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -67121,13 +67409,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -67140,7 +67428,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart @@ -67165,7 +67453,7 @@ if local.get $targetStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add local.set $ptr @@ -67176,9 +67464,10 @@ i32.add f64.load local.set $value - i32.const 1 + i32.const 0 drop - i32.const 1 + i32.const 0 + i32.eqz drop local.get $ptr local.get $value @@ -67187,16 +67476,12 @@ f64.const 0 f64.eq if (result i32) - f64.const 0 - f64.const 255 local.get $value - f64.min - f64.max - i32.trunc_sat_f64_u + i32.trunc_sat_f64_s else i32.const 0 end - i32.store8 + i32.store16 local.get $i i32.const 1 i32.add @@ -67209,14 +67494,17 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $9 i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -67241,11 +67529,11 @@ i32.const 0 drop local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/typedarray/Uint8Array#get:length local.set $sourceLen local.get $offset|5 @@ -67258,67 +67546,93 @@ local.get $offset|5 i32.add local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Uint8ClampedArray#get:length + local.get $12 + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart + i32.const 1 i32.const 0 - i32.eqz + i32.eq drop - local.get $targetStart - local.get $sourceStart - local.get $sourceLen i32.const 0 - i32.shl - memory.copy + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 1 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.store16 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -67343,11 +67657,11 @@ i32.const 0 drop local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/typedarray/Int16Array#get:length local.set $sourceLen local.get $offset|5 @@ -67360,105 +67674,57 @@ local.get $offset|5 i32.add local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + local.get $9 + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart i32.const 0 - i32.const 1 - i32.eq + i32.eqz drop - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 0 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.set $value - i32.const 1 - drop - i32.const 0 - drop - i32.const 1 - i32.eqz - drop - i32.const 1 - i32.const 4 - i32.le_u - drop - local.get $ptr - local.get $value - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - i32.const 255 - local.get $value - i32.sub - i32.const 31 - i32.shr_s - local.get $value - i32.or - i32.and - i32.store8 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end + local.get $targetStart + local.get $sourceStart + local.get $sourceLen + i32.const 1 + i32.shl + memory.copy global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -67515,13 +67781,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -67534,7 +67800,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 0 + i32.const 1 i32.shl i32.add local.set $targetStart @@ -67547,7 +67813,8 @@ call $~lib/array/Array#get:dataStart local.set $sourceStart i32.const 1 - i32.eqz + i32.const 0 + i32.eq drop i32.const 0 local.set $i @@ -67558,7 +67825,7 @@ if local.get $targetStart local.get $i - i32.const 0 + i32.const 1 i32.shl i32.add local.set $ptr @@ -67569,32 +67836,13 @@ i32.add i32.load8_s local.set $value - i32.const 1 - drop i32.const 0 drop - i32.const 1 - i32.eqz - drop - i32.const 1 - i32.const 4 - i32.le_u + i32.const 0 drop local.get $ptr local.get $value - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - i32.const 255 - local.get $value - i32.sub - i32.const 31 - i32.shr_s - local.get $value - i32.or - i32.and - i32.store8 + i32.store16 local.get $i i32.const 1 i32.add @@ -67607,7 +67855,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -67738,7 +67986,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int16Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -67754,7 +68002,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> + call $~lib/typedarray/Int16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67762,16 +68010,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 0 - i32.const 64 - i32.const 10704 + i32.const 1 + i32.const 65 + i32.const 10928 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67785,7 +68033,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> + call $~lib/typedarray/Int16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67793,16 +68041,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 0 - i32.const 64 - i32.const 10800 + i32.const 1 + i32.const 65 + i32.const 11024 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67816,7 +68064,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67824,16 +68072,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 0 - i32.const 64 - i32.const 10832 + i32.const 1 + i32.const 65 + i32.const 11072 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> i32.const 1 drop local.get $a @@ -67849,7 +68097,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> + call $~lib/typedarray/Int16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67857,16 +68105,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 0 - i32.const 64 - i32.const 10864 + i32.const 1 + i32.const 65 + i32.const 11120 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67880,7 +68128,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67894,7 +68142,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -67908,8 +68156,8 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array> - i32.const 1 + call $~lib/typedarray/Int16Array#set<~lib/array/Array> + i32.const 0 drop local.get $a local.set $9 @@ -67918,22 +68166,22 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 0 - i32.const 64 - i32.const 10896 + i32.const 1 + i32.const 65 + i32.const 11168 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -67990,13 +68238,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68064,7 +68312,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68080,7 +68328,7 @@ local.get $1 i32.store local.get $1 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68089,7 +68337,7 @@ local.get $1 return ) - (func $~lib/typedarray/Int16Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/typedarray/Uint16Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68110,7 +68358,7 @@ i32.const 1 i32.shl i32.add - i32.load16_s + i32.load16_u local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68119,7 +68367,7 @@ local.get $2 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68135,12 +68383,12 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index i32.const 1 i32.shl i32.add - i32.load16_s + i32.load16_u local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -68149,7 +68397,7 @@ local.get $2 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -68169,7 +68417,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.set $len local.get $len local.get $compare @@ -68178,7 +68426,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -68203,7 +68451,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Int16Array#__uget + call $~lib/typedarray/Uint16Array#__uget local.set $vala local.get $compare local.set $6 @@ -68212,20 +68460,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i32.ne if - i32.const 10976 + i32.const 11264 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_s + f64.convert_i32_u local.get $valb - f64.convert_i32_s + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -68252,7 +68500,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68309,13 +68557,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68377,7 +68625,7 @@ f32.eq if (result i32) local.get $value - i32.trunc_sat_f32_s + i32.trunc_sat_f32_u else i32.const 0 end @@ -68394,7 +68642,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68451,13 +68699,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68526,7 +68774,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68583,13 +68831,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68651,7 +68899,7 @@ f64.eq if (result i32) local.get $value - i32.trunc_sat_f64_s + i32.trunc_sat_f64_u else i32.const 0 end @@ -68668,7 +68916,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68725,13 +68973,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68799,7 +69047,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68853,13 +69101,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -68898,7 +69146,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -68955,13 +69203,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint16Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -69029,7 +69277,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -69160,7 +69408,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -69176,7 +69424,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int16Array#set<~lib/array/Array> + call $~lib/typedarray/Uint16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69185,15 +69433,15 @@ local.get $9 i32.const 10 i32.const 1 - i32.const 65 - i32.const 10928 + i32.const 66 + i32.const 11216 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69207,7 +69455,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Int16Array#set<~lib/array/Array> + call $~lib/typedarray/Uint16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69216,15 +69464,15 @@ local.get $9 i32.const 10 i32.const 1 - i32.const 65 - i32.const 11024 + i32.const 66 + i32.const 11312 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69238,7 +69486,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69247,15 +69495,15 @@ local.get $9 i32.const 10 i32.const 1 - i32.const 65 - i32.const 11072 + i32.const 66 + i32.const 11360 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> i32.const 1 drop local.get $a @@ -69271,7 +69519,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Int16Array#set<~lib/array/Array> + call $~lib/typedarray/Uint16Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69280,15 +69528,15 @@ local.get $9 i32.const 10 i32.const 1 - i32.const 65 - i32.const 11120 + i32.const 66 + i32.const 11408 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69302,7 +69550,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69316,7 +69564,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -69330,7 +69578,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Int16Array#set<~lib/array/Array> + call $~lib/typedarray/Uint16Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -69341,31 +69589,28 @@ local.get $9 i32.const 10 i32.const 1 - i32.const 65 - i32.const 11168 + i32.const 66 + i32.const 11456 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -69390,11 +69635,11 @@ i32.const 0 drop local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/array/Array#get:length local.set $sourceLen local.get $offset|5 @@ -69407,111 +69652,57 @@ local.get $offset|5 i32.add local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint16Array#get:length + local.get $9 + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 1 - i32.const 2 - i32.eq - drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 1 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - i32.store16 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end + i32.eqz + drop + local.get $targetStart + local.get $sourceStart + local.get $sourceLen + i32.const 2 + i32.shl + memory.copy global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint16Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/typedarray/Int32Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -69529,10 +69720,10 @@ local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + i32.load local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -69541,7 +69732,7 @@ local.get $2 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -69557,12 +69748,12 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_u + i32.load local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -69571,7 +69762,7 @@ local.get $2 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -69591,7 +69782,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length local.set $len local.get $len local.get $compare @@ -69600,7 +69791,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -69625,7 +69816,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Uint16Array#__uget + call $~lib/typedarray/Int32Array#__uget local.set $vala local.get $compare local.set $6 @@ -69634,20 +69825,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i32.ne if - i32.const 11264 + i32.const 11568 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_u + f64.convert_i32_s local.get $valb - f64.convert_i32_u + f64.convert_i32_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -69674,7 +69865,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -69731,13 +69922,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -69750,7 +69941,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -69775,7 +69966,7 @@ if local.get $targetStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add local.set $ptr @@ -69799,11 +69990,11 @@ f32.eq if (result i32) local.get $value - i32.trunc_sat_f32_u + i32.trunc_sat_f32_s else i32.const 0 end - i32.store16 + i32.store local.get $i i32.const 1 i32.add @@ -69816,7 +70007,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -69873,13 +70064,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -69892,7 +70083,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -69904,7 +70095,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 1 + i32.const 2 i32.const 3 i32.eq drop @@ -69917,7 +70108,7 @@ if local.get $targetStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add local.set $ptr @@ -69935,7 +70126,7 @@ local.get $ptr local.get $value i32.wrap_i64 - i32.store16 + i32.store local.get $i i32.const 1 i32.add @@ -69948,7 +70139,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -70005,13 +70196,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -70024,7 +70215,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -70049,7 +70240,7 @@ if local.get $targetStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add local.set $ptr @@ -70073,11 +70264,11 @@ f64.eq if (result i32) local.get $value - i32.trunc_sat_f64_u + i32.trunc_sat_f64_s else i32.const 0 end - i32.store16 + i32.store local.get $i i32.const 1 i32.add @@ -70090,7 +70281,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -70125,140 +70316,12 @@ i32.const 0 drop local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint8Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint16Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 1 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart - i32.const 1 - i32.const 0 - i32.eq - drop - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 1 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - i32.store16 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $9 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target - i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Int16Array#get:length + local.get $12 + call $~lib/typedarray/Uint8Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -70270,57 +70333,217 @@ local.get $offset|5 i32.add local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Uint16Array#get:length + local.get $12 + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart + i32.const 2 i32.const 0 - i32.eqz + i32.eq drop - local.get $targetStart - local.get $sourceStart - local.get $sourceLen - i32.const 1 + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 2 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int16Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int32Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 2 i32.shl - memory.copy + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart + i32.const 2 + i32.const 1 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 2 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -70377,13 +70600,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -70396,7 +70619,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 1 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -70408,7 +70631,7 @@ local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 1 + i32.const 2 i32.const 0 i32.eq drop @@ -70421,7 +70644,7 @@ if local.get $targetStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add local.set $ptr @@ -70438,7 +70661,7 @@ drop local.get $ptr local.get $value - i32.store16 + i32.store local.get $i i32.const 1 i32.add @@ -70451,7 +70674,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -70582,7 +70805,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -70598,7 +70821,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint16Array#set<~lib/array/Array> + call $~lib/typedarray/Int32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70606,16 +70829,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 1 - i32.const 66 - i32.const 11216 + i32.const 2 + i32.const 17 + i32.const 11504 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70629,7 +70852,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Uint16Array#set<~lib/array/Array> + call $~lib/typedarray/Int32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70637,16 +70860,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 1 - i32.const 66 - i32.const 11312 + i32.const 2 + i32.const 17 + i32.const 11616 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70660,7 +70883,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70668,16 +70891,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 1 - i32.const 66 - i32.const 11360 + i32.const 2 + i32.const 17 + i32.const 11680 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> i32.const 1 drop local.get $a @@ -70693,7 +70916,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Uint16Array#set<~lib/array/Array> + call $~lib/typedarray/Int32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70701,16 +70924,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 1 - i32.const 66 - i32.const 11408 + i32.const 2 + i32.const 17 + i32.const 11744 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70724,7 +70947,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70738,7 +70961,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -70752,7 +70975,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Uint16Array#set<~lib/array/Array> + call $~lib/typedarray/Int32Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -70762,22 +70985,22 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 1 - i32.const 66 - i32.const 11456 + i32.const 2 + i32.const 17 + i32.const 11808 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -70831,13 +71054,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -70876,7 +71099,32 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $this + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/array/Array#get:length_ + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + return + ) + (func $~lib/typedarray/Uint32Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -70906,7 +71154,7 @@ local.get $2 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -70922,7 +71170,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index i32.const 2 i32.shl @@ -70936,7 +71184,7 @@ local.get $2 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i32) @@ -70956,7 +71204,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.set $len local.get $len local.get $compare @@ -70965,7 +71213,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -70990,7 +71238,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Int32Array#__uget + call $~lib/typedarray/Uint32Array#__uget local.set $vala local.get $compare local.set $6 @@ -70999,20 +71247,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i32.ne if - i32.const 11568 + i32.const 11936 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_s + f64.convert_i32_u local.get $valb - f64.convert_i32_s + f64.convert_i32_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -71039,7 +71287,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71096,13 +71344,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71164,7 +71412,7 @@ f32.eq if (result i32) local.get $value - i32.trunc_sat_f32_s + i32.trunc_sat_f32_u else i32.const 0 end @@ -71181,7 +71429,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71238,13 +71486,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71313,7 +71561,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71370,13 +71618,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71438,7 +71686,7 @@ f64.eq if (result i32) local.get $value - i32.trunc_sat_f64_s + i32.trunc_sat_f64_u else i32.const 0 end @@ -71455,7 +71703,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71512,13 +71760,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71586,7 +71834,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71643,13 +71891,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71717,7 +71965,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -71774,13 +72022,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -71848,7 +72096,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -71979,7 +72227,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -71995,7 +72243,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int32Array#set<~lib/array/Array> + call $~lib/typedarray/Uint32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72004,15 +72252,15 @@ local.get $9 i32.const 10 i32.const 2 - i32.const 17 - i32.const 11504 + i32.const 67 + i32.const 11872 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72026,7 +72274,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Int32Array#set<~lib/array/Array> + call $~lib/typedarray/Uint32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72035,15 +72283,15 @@ local.get $9 i32.const 10 i32.const 2 - i32.const 17 - i32.const 11616 + i32.const 67 + i32.const 11984 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72057,7 +72305,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72066,15 +72314,15 @@ local.get $9 i32.const 10 i32.const 2 - i32.const 17 - i32.const 11680 + i32.const 67 + i32.const 12048 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> i32.const 1 drop local.get $a @@ -72090,7 +72338,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Int32Array#set<~lib/array/Array> + call $~lib/typedarray/Uint32Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72099,15 +72347,15 @@ local.get $9 i32.const 10 i32.const 2 - i32.const 17 - i32.const 11744 + i32.const 67 + i32.const 12112 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72121,7 +72369,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72135,7 +72383,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -72149,7 +72397,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Int32Array#set<~lib/array/Array> + call $~lib/typedarray/Uint32Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -72160,28 +72408,31 @@ local.get $9 i32.const 10 i32.const 2 - i32.const 17 - i32.const 11808 + i32.const 67 + i32.const 12176 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $9 i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -72206,11 +72457,11 @@ i32.const 0 drop local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/array/Array#get:length local.set $sourceLen local.get $offset|5 @@ -72223,57 +72474,87 @@ local.get $offset|5 i32.add local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Uint32Array#get:length + local.get $12 + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 0 - i32.eqz - drop - local.get $targetStart - local.get $sourceStart - local.get $sourceLen + i32.const 3 i32.const 2 - i32.shl - memory.copy + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 3 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + i64.extend_i32_s + i64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -72289,7 +72570,7 @@ local.get $1 i32.store local.get $1 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -72298,8 +72579,9 @@ local.get $1 return ) - (func $~lib/typedarray/Uint32Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/typedarray/Int64Array#__uget (param $this i32) (param $index i32) (result i64) (local $2 i32) + (local $3 i64) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -72316,20 +72598,21 @@ local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load - local.set $2 + i64.load + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $3 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i64) (local $2 i32) + (local $3 i64) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -72344,25 +72627,25 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - i32.load - local.set $2 + i64.load + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $3 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) - (local $vala i32) - (local $valb i32) + (local $vala i64) + (local $valb i64) (local $6 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -72378,7 +72661,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $len local.get $len local.get $compare @@ -72387,7 +72670,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -72412,7 +72695,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Uint32Array#__uget + call $~lib/typedarray/Int64Array#__uget local.set $vala local.get $compare local.set $6 @@ -72421,20 +72704,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb - i32.ne + i64.ne if - i32.const 11936 + i32.const 12352 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i32_u + f64.convert_i64_s local.get $valb - f64.convert_i32_u + f64.convert_i64_s f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -72461,7 +72744,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -72518,13 +72801,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -72537,7 +72820,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -72562,7 +72845,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -72584,13 +72867,13 @@ f32.sub f32.const 0 f32.eq - if (result i32) + if (result i64) local.get $value - i32.trunc_sat_f32_u + i64.trunc_sat_f32_s else - i32.const 0 + i64.const 0 end - i32.store + i64.store local.get $i i32.const 1 i32.add @@ -72603,17 +72886,14 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i64) - (local $12 i32) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -72638,11 +72918,11 @@ i32.const 0 drop local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/typedarray/Int64Array#get:length local.set $sourceLen local.get $offset|5 @@ -72655,87 +72935,57 @@ local.get $offset|5 i32.add local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint32Array#get:length + local.get $9 + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $12 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $9 i32.store offset=8 - local.get $12 + local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 2 - i32.const 3 - i32.eq - drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 2 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 3 - i32.shl - i32.add - i64.load - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - i32.wrap_i64 - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end + i32.eqz + drop + local.get $targetStart + local.get $sourceStart + local.get $sourceLen + i32.const 3 + i32.shl + memory.copy global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -72792,13 +73042,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -72811,7 +73061,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -72836,7 +73086,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -72858,13 +73108,13 @@ f64.sub f64.const 0 f64.eq - if (result i32) + if (result i64) local.get $value - i32.trunc_sat_f64_u + i64.trunc_sat_f64_s else - i32.const 0 + i64.const 0 end - i32.store + i64.store local.get $i i32.const 1 i32.add @@ -72877,7 +73127,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -72934,13 +73184,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -72953,7 +73203,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -72965,7 +73215,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 2 + i32.const 3 i32.const 0 i32.eq drop @@ -72978,7 +73228,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -72995,7 +73245,8 @@ drop local.get $ptr local.get $value - i32.store + i64.extend_i32_u + i64.store local.get $i i32.const 1 i32.add @@ -73008,7 +73259,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -73065,13 +73316,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -73084,7 +73335,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -73096,7 +73347,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 2 + i32.const 3 i32.const 1 i32.eq drop @@ -73109,7 +73360,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -73126,7 +73377,8 @@ drop local.get $ptr local.get $value - i32.store + i64.extend_i32_s + i64.store local.get $i i32.const 1 i32.add @@ -73139,7 +73391,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -73196,13 +73448,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Int64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -73215,7 +73467,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -73227,7 +73479,7 @@ local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 2 + i32.const 3 i32.const 0 i32.eq drop @@ -73240,7 +73492,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -73257,7 +73509,8 @@ drop local.get $ptr local.get $value - i32.store + i64.extend_i32_s + i64.store local.get $i i32.const 1 i32.add @@ -73270,7 +73523,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -73401,7 +73654,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -73417,7 +73670,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint32Array#set<~lib/array/Array> + call $~lib/typedarray/Int64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73425,16 +73678,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 2 - i32.const 67 - i32.const 11872 + i32.const 3 + i32.const 68 + i32.const 12240 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73448,7 +73701,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Uint32Array#set<~lib/array/Array> + call $~lib/typedarray/Int64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73456,16 +73709,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 2 - i32.const 67 - i32.const 11984 + i32.const 3 + i32.const 68 + i32.const 12400 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73479,7 +73732,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73487,16 +73740,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 2 - i32.const 67 - i32.const 12048 + i32.const 3 + i32.const 68 + i32.const 12512 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> i32.const 1 drop local.get $a @@ -73512,7 +73765,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Uint32Array#set<~lib/array/Array> + call $~lib/typedarray/Int64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73520,16 +73773,16 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 2 - i32.const 67 - i32.const 12112 + i32.const 3 + i32.const 68 + i32.const 12624 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73543,7 +73796,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73557,7 +73810,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -73571,7 +73824,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Uint32Array#set<~lib/array/Array> + call $~lib/typedarray/Int64Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -73581,22 +73834,22 @@ i32.store offset=4 local.get $9 i32.const 10 - i32.const 2 - i32.const 67 - i32.const 12176 + i32.const 3 + i32.const 68 + i32.const 12736 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -73653,13 +73906,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -73728,7 +73981,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) + (func $~lib/array/Array#get:length (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -73744,7 +73997,7 @@ local.get $1 i32.store local.get $1 - call $~lib/array/Array#get:length_ + call $~lib/array/Array#get:length_ local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -73753,7 +74006,7 @@ local.get $1 return ) - (func $~lib/typedarray/Int64Array#__uget (param $this i32) (param $index i32) (result i64) + (func $~lib/typedarray/Uint64Array#__uget (param $this i32) (param $index i32) (result i64) (local $2 i32) (local $3 i64) global.get $~lib/memory/__stack_pointer @@ -73784,7 +74037,7 @@ local.get $3 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i64) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i64) (local $2 i32) (local $3 i64) global.get $~lib/memory/__stack_pointer @@ -73801,7 +74054,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index i32.const 3 i32.shl @@ -73815,7 +74068,7 @@ local.get $3 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) (local $vala i64) @@ -73835,7 +74088,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.set $len local.get $len local.get $compare @@ -73844,7 +74097,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -73869,7 +74122,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Int64Array#__uget + call $~lib/typedarray/Uint64Array#__uget local.set $vala local.get $compare local.set $6 @@ -73878,20 +74131,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb i64.ne if - i32.const 12352 + i32.const 12960 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i64_s + f64.convert_i64_u local.get $valb - f64.convert_i64_s + f64.convert_i64_u f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -73918,7 +74171,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -73975,13 +74228,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74043,7 +74296,7 @@ f32.eq if (result i64) local.get $value - i64.trunc_sat_f32_s + i64.trunc_sat_f32_u else i64.const 0 end @@ -74060,7 +74313,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -74114,13 +74367,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74159,7 +74412,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -74216,13 +74469,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74284,7 +74537,7 @@ f64.eq if (result i64) local.get $value - i64.trunc_sat_f64_s + i64.trunc_sat_f64_u else i64.const 0 end @@ -74301,7 +74554,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -74358,13 +74611,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74433,7 +74686,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -74490,13 +74743,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74565,7 +74818,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -74622,13 +74875,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/typedarray/Uint64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -74697,7 +74950,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -74828,7 +75081,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Int64Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $a i32.store offset=16 local.get $a @@ -74844,7 +75097,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int64Array#set<~lib/array/Array> + call $~lib/typedarray/Uint64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74853,15 +75106,15 @@ local.get $9 i32.const 10 i32.const 3 - i32.const 68 - i32.const 12240 + i32.const 69 + i32.const 12848 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74875,7 +75128,7 @@ i32.store offset=20 local.get $9 i32.const 3 - call $~lib/typedarray/Int64Array#set<~lib/array/Array> + call $~lib/typedarray/Uint64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74884,15 +75137,15 @@ local.get $9 i32.const 10 i32.const 3 - i32.const 68 - i32.const 12400 + i32.const 69 + i32.const 13008 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74906,7 +75159,7 @@ i32.store offset=20 local.get $9 i32.const 6 - call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74915,15 +75168,15 @@ local.get $9 i32.const 10 i32.const 3 - i32.const 68 - i32.const 12512 + i32.const 69 + i32.const 13120 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> i32.const 1 drop local.get $a @@ -74939,7 +75192,7 @@ i32.store offset=20 local.get $9 i32.const 2 - call $~lib/typedarray/Int64Array#set<~lib/array/Array> + call $~lib/typedarray/Uint64Array#set<~lib/array/Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74948,15 +75201,15 @@ local.get $9 i32.const 10 i32.const 3 - i32.const 68 - i32.const 12624 + i32.const 69 + i32.const 13232 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74970,7 +75223,7 @@ i32.store offset=20 local.get $9 i32.const 0 - call $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74984,7 +75237,7 @@ i32.store offset=20 local.get $9 i32.const 4 - call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> local.get $a local.set $9 global.get $~lib/memory/__stack_pointer @@ -74998,7 +75251,7 @@ i32.store offset=20 local.get $9 i32.const 7 - call $~lib/typedarray/Int64Array#set<~lib/array/Array> + call $~lib/typedarray/Uint64Array#set<~lib/array/Array> i32.const 0 drop local.get $a @@ -75009,21 +75262,21 @@ local.get $9 i32.const 10 i32.const 3 - i32.const 68 - i32.const 12736 + i32.const 69 + i32.const 13344 call $~lib/rt/__newArray local.set $9 global.get $~lib/memory/__stack_pointer local.get $9 i32.store offset=20 local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> + call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -75080,13 +75333,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -75099,7 +75352,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -75111,8 +75364,8 @@ local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 3 - i32.const 2 + i32.const 0 + i32.const 1 i32.eq drop i32.const 0 @@ -75124,7 +75377,7 @@ if local.get $targetStart local.get $i - i32.const 3 + i32.const 2 i32.shl i32.add local.set $ptr @@ -75141,8 +75394,8 @@ drop local.get $ptr local.get $value - i64.extend_i32_s - i64.store + f32.convert_i32_s + f32.store local.get $i i32.const 1 i32.add @@ -75155,34 +75408,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#get:length (param $this i32) (result i32) - (local $1 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 - call $~lib/array/Array#get:length_ - local.set $1 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $1 - return - ) - (func $~lib/typedarray/Uint64Array#__uget (param $this i32) (param $index i32) (result i64) + (func $~lib/typedarray/Float32Array#__uget (param $this i32) (param $index i32) (result f32) (local $2 i32) - (local $3 i64) + (local $3 f32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -75199,10 +75427,10 @@ local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index - i32.const 3 + i32.const 2 i32.shl i32.add - i64.load + f32.load local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -75211,9 +75439,9 @@ local.get $3 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result i64) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result f32) (local $2 i32) - (local $3 i64) + (local $3 f32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -75228,12 +75456,12 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index - i32.const 3 + i32.const 2 i32.shl i32.add - i64.load + f32.load local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -75242,11 +75470,11 @@ local.get $3 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) - (local $vala i64) - (local $valb i64) + (local $vala f32) + (local $valb f32) (local $6 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -75262,7 +75490,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $len local.get $len local.get $compare @@ -75271,7 +75499,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -75296,7 +75524,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Uint64Array#__uget + call $~lib/typedarray/Float32Array#__uget local.set $vala local.get $compare local.set $6 @@ -75305,20 +75533,20 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget + call $~lib/array/Array#__uget local.set $valb local.get $vala local.get $valb - i64.ne + f32.ne if - i32.const 12960 + i32.const 13520 i32.const 3 local.get $i f64.convert_i32_s local.get $vala - f64.convert_i64_u + f64.promote_f32 local.get $valb - f64.convert_i64_u + f64.promote_f32 f64.const 0 f64.const 0 call $~lib/builtins/trace @@ -75345,149 +75573,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value f32) - (local $12 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target - i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint64Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:dataStart - local.set $sourceStart - i32.const 1 - i32.const 0 - i32.eq - drop - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 2 - i32.shl - i32.add - f32.load - local.set $value - i32.const 0 - drop - i32.const 0 - i32.eqz - drop - local.get $ptr - local.get $value - local.get $value - f32.sub - f32.const 0 - f32.eq - if (result i64) - local.get $value - i64.trunc_sat_f32_u - else - i64.const 0 - end - i64.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end - end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -75524,7 +75610,7 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Int64Array#get:length + call $~lib/array/Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -75541,13 +75627,13 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -75560,7 +75646,7 @@ local.get $9 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -75570,7 +75656,7 @@ local.get $9 i32.store offset=8 local.get $9 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart + call $~lib/array/Array#get:dataStart local.set $sourceStart i32.const 0 i32.eqz @@ -75578,7 +75664,7 @@ local.get $targetStart local.get $sourceStart local.get $sourceLen - i32.const 3 + i32.const 2 i32.shl memory.copy global.get $~lib/memory/__stack_pointer @@ -75586,7 +75672,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -75595,7 +75681,7 @@ (local $sourceStart i32) (local $i i32) (local $ptr i32) - (local $value f64) + (local $value i64) (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -75626,7 +75712,7 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/array/Array#get:length + call $~lib/typedarray/Int64Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -75643,13 +75729,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -75662,7 +75748,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -75672,10 +75758,10 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/array/Array#get:dataStart + call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 1 i32.const 0 + i32.const 1 i32.eq drop i32.const 0 @@ -75687,7 +75773,7 @@ if local.get $targetStart local.get $i - i32.const 3 + i32.const 2 i32.shl i32.add local.set $ptr @@ -75696,26 +75782,16 @@ i32.const 3 i32.shl i32.add - f64.load + i64.load local.set $value i32.const 0 drop i32.const 0 - i32.eqz drop local.get $ptr local.get $value - local.get $value - f64.sub - f64.const 0 - f64.eq - if (result i64) - local.get $value - i64.trunc_sat_f64_u - else - i64.const 0 - end - i64.store + f32.convert_i64_s + f32.store local.get $i i32.const 1 i32.add @@ -75728,7 +75804,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -75785,13 +75861,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -75804,7 +75880,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -75816,8 +75892,8 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 3 i32.const 0 + i32.const 1 i32.eq drop i32.const 0 @@ -75829,7 +75905,7 @@ if local.get $targetStart local.get $i - i32.const 3 + i32.const 2 i32.shl i32.add local.set $ptr @@ -75846,8 +75922,8 @@ drop local.get $ptr local.get $value - i64.extend_i32_u - i64.store + f32.convert_i32_u + f32.store local.get $i i32.const 1 i32.add @@ -75860,7 +75936,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -75917,13 +75993,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -75936,7 +76012,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -75948,7 +76024,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 3 + i32.const 0 i32.const 1 i32.eq drop @@ -75961,7 +76037,7 @@ if local.get $targetStart local.get $i - i32.const 3 + i32.const 2 i32.shl i32.add local.set $ptr @@ -75978,8 +76054,8 @@ drop local.get $ptr local.get $value - i64.extend_i32_s - i64.store + f32.convert_i32_s + f32.store local.get $i i32.const 1 i32.add @@ -75992,7 +76068,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -76049,13 +76125,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint64Array#get:length + call $~lib/typedarray/Float32Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -76068,7 +76144,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 3 + i32.const 2 i32.shl i32.add local.set $targetStart @@ -76080,8 +76156,8 @@ local.get $12 call $~lib/array/Array#get:dataStart local.set $sourceStart - i32.const 3 i32.const 0 + i32.const 1 i32.eq drop i32.const 0 @@ -76093,7 +76169,7 @@ if local.get $targetStart local.get $i - i32.const 3 + i32.const 2 i32.shl i32.add local.set $ptr @@ -76110,8 +76186,8 @@ drop local.get $ptr local.get $value - i64.extend_i32_s - i64.store + f32.convert_i32_s + f32.store local.get $i i32.const 1 i32.add @@ -76124,7 +76200,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array> + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array> (local $setSource4 i32) (local $setSource5 i32) (local $setSource6 i32) @@ -76134,7 +76210,6 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 24 i32.sub @@ -76151,29 +76226,29 @@ local.tee $setSource4 i32.store local.get $setSource4 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 0 i64.const 7 call $~lib/typedarray/Int64Array#__set local.get $setSource4 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 1 i64.const 8 call $~lib/typedarray/Int64Array#__set local.get $setSource4 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2 i64.const 9 call $~lib/typedarray/Int64Array#__set @@ -76184,38 +76259,38 @@ local.tee $setSource5 i32.store offset=8 local.get $setSource5 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 0 i32.const 100 call $~lib/typedarray/Uint8Array#__set local.get $setSource5 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 1 i32.const 101 call $~lib/typedarray/Uint8Array#__set local.get $setSource5 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2 i32.const 102 call $~lib/typedarray/Uint8Array#__set local.get $setSource5 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 3 i32.const 103 call $~lib/typedarray/Uint8Array#__set @@ -76226,231 +76301,200 @@ local.tee $setSource6 i32.store offset=12 local.get $setSource6 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 0 i32.const 1000 call $~lib/typedarray/Int16Array#__set local.get $setSource6 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 1 i32.const 1001 call $~lib/typedarray/Int16Array#__set local.get $setSource6 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2 i32.const 1002 call $~lib/typedarray/Int16Array#__set global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 10 - call $~lib/typedarray/Uint64Array#constructor + call $~lib/typedarray/Float32Array#constructor local.tee $a i32.store offset=16 local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 global.get $std/typedarray/setSource1 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 0 - call $~lib/typedarray/Uint64Array#set<~lib/array/Array> + call $~lib/typedarray/Float32Array#set<~lib/array/Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 10 - i32.const 3 - i32.const 69 - i32.const 12848 + i32.const 2 + i32.const 62 + i32.const 13456 call $~lib/rt/__newArray - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 global.get $std/typedarray/setSource2 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 3 - call $~lib/typedarray/Uint64Array#set<~lib/array/Array> + call $~lib/typedarray/Float32Array#set<~lib/array/Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 10 - i32.const 3 - i32.const 69 - i32.const 13008 + i32.const 2 + i32.const 62 + i32.const 13568 call $~lib/rt/__newArray - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 local.get $setSource4 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 6 - call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> + call $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 10 - i32.const 3 - i32.const 69 - i32.const 13120 - call $~lib/rt/__newArray - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=20 - local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> - i32.const 1 - drop - local.get $a - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - global.get $std/typedarray/setSource3 - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=20 - local.get $9 i32.const 2 - call $~lib/typedarray/Uint64Array#set<~lib/array/Array> - local.get $a - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=4 - local.get $9 - i32.const 10 - i32.const 3 - i32.const 69 - i32.const 13232 + i32.const 62 + i32.const 13632 call $~lib/rt/__newArray - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> + i32.const 0 + drop local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 local.get $setSource5 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 0 - call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> + call $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 local.get $setSource6 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 4 - call $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> + call $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 global.get $std/typedarray/setSource7 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 + local.get $8 i32.const 7 - call $~lib/typedarray/Uint64Array#set<~lib/array/Array> + call $~lib/typedarray/Float32Array#set<~lib/array/Array> i32.const 0 drop local.get $a - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 10 - i32.const 3 - i32.const 69 - i32.const 13344 + i32.const 2 + i32.const 62 + i32.const 13696 call $~lib/rt/__newArray - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=20 - local.get $9 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> global.get $~lib/memory/__stack_pointer i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -76507,13 +76551,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -76526,7 +76570,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -76551,7 +76595,7 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr @@ -76568,8 +76612,8 @@ drop local.get $ptr local.get $value - f32.convert_i32_s - f32.store + f64.convert_i32_s + f64.store local.get $i i32.const 1 i32.add @@ -76582,9 +76626,9 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#__uget (param $this i32) (param $index i32) (result f32) + (func $~lib/typedarray/Float64Array#__uget (param $this i32) (param $index i32) (result f64) (local $2 i32) - (local $3 f32) + (local $3 f64) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -76601,10 +76645,10 @@ local.get $2 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - f32.load + f64.load local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -76613,9 +76657,9 @@ local.get $3 return ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result f32) + (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result f64) (local $2 i32) - (local $3 f32) + (local $3 f64) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -76630,12 +76674,12 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:dataStart + call $~lib/array/Array#get:dataStart local.get $index - i32.const 2 + i32.const 3 i32.shl i32.add - f32.load + f64.load local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -76644,11 +76688,11 @@ local.get $3 return ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> (param $target i32) (param $compare i32) + (func $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> (param $target i32) (param $compare i32) (local $len i32) (local $i i32) - (local $vala f32) - (local $valb f32) + (local $vala f64) + (local $valb f64) (local $6 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -76664,7 +76708,7 @@ local.get $6 i32.store local.get $6 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length local.set $len local.get $len local.get $compare @@ -76673,7 +76717,7 @@ local.get $6 i32.store local.get $6 - call $~lib/array/Array#get:length + call $~lib/array/Array#get:length i32.eq i32.eqz if @@ -76698,7 +76742,7 @@ i32.store local.get $6 local.get $i - call $~lib/typedarray/Float32Array#__uget + call $~lib/typedarray/Float64Array#__uget local.set $vala local.get $compare local.set $6 @@ -76707,34 +76751,429 @@ i32.store local.get $6 local.get $i - call $~lib/array/Array#__uget - local.set $valb - local.get $vala - local.get $valb - f32.ne - if - i32.const 13520 - i32.const 3 - local.get $i - f64.convert_i32_s - local.get $vala - f64.promote_f32 - local.get $valb - f64.promote_f32 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 764 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - end + call $~lib/array/Array#__uget + local.set $valb + local.get $vala + local.get $valb + f64.ne + if + i32.const 13872 + i32.const 3 + local.get $i + f64.convert_i32_s + local.get $vala + local.get $valb + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + i32.const 0 + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 764 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + end + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value f32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Float64Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 3 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/array/Array#get:dataStart + local.set $sourceStart + i32.const 3 + i32.const 2 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 3 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 2 + i32.shl + i32.add + f32.load + local.set $value + i32.const 0 + drop + i32.const 1 + i32.eqz + drop + local.get $ptr + local.get $value + f64.promote_f32 + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i64) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Int64Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Float64Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 3 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart + i32.const 0 + i32.const 1 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 3 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 3 + i32.shl + i32.add + i64.load + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + f64.convert_i64_s + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (local $target i32) + (local $source|4 i32) + (local $offset|5 i32) + (local $sourceLen i32) + (local $targetStart i32) + (local $sourceStart i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $this + local.tee $target + i32.store + global.get $~lib/memory/__stack_pointer + local.get $source + local.tee $source|4 + i32.store offset=4 + local.get $offset + local.set $offset|5 + i32.const 0 + drop + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Uint8Array#get:length + local.set $sourceLen + local.get $offset|5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $sourceLen + local.get $offset|5 + i32.add + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/typedarray/Float64Array#get:length + i32.gt_s + end + if + i32.const 336 + i32.const 608 + i32.const 1911 + i32.const 5 + call $~lib/builtins/abort + unreachable + end + local.get $target + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $offset|5 + i32.const 3 + i32.shl + i32.add + local.set $targetStart + local.get $source|4 + local.set $12 + global.get $~lib/memory/__stack_pointer + local.get $12 + i32.store offset=8 + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.set $sourceStart + i32.const 0 + i32.const 1 + i32.eq + drop + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 3 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + f64.convert_i32_u + f64.store local.get $i i32.const 1 i32.add @@ -76743,18 +77182,21 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) (local $sourceLen i32) (local $targetStart i32) (local $sourceStart i32) - (local $9 i32) + (local $i i32) + (local $ptr i32) + (local $value i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -76779,12 +77221,12 @@ i32.const 0 drop local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/array/Array#get:length + local.get $12 + call $~lib/typedarray/Int16Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -76796,57 +77238,87 @@ local.get $offset|5 i32.add local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/typedarray/Float32Array#get:length + local.get $12 + call $~lib/typedarray/Float64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 + local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $9 + local.set $12 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $12 i32.store offset=8 - local.get $9 - call $~lib/array/Array#get:dataStart + local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart i32.const 0 - i32.eqz + i32.const 1 + i32.eq drop - local.get $targetStart - local.get $sourceStart - local.get $sourceLen - i32.const 2 - i32.shl - memory.copy + i32.const 0 + local.set $i + loop $for-loop|0 + local.get $i + local.get $sourceLen + i32.lt_s + if + local.get $targetStart + local.get $i + i32.const 3 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $value + i32.const 0 + drop + i32.const 0 + drop + local.get $ptr + local.get $value + f64.convert_i32_s + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -76855,7 +77327,7 @@ (local $sourceStart i32) (local $i i32) (local $ptr i32) - (local $value i64) + (local $value i32) (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -76886,7 +77358,7 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int64Array#get:length + call $~lib/array/Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -76903,13 +77375,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Float64Array#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -76922,7 +77394,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 3 i32.shl i32.add local.set $targetStart @@ -76932,7 +77404,7 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart + call $~lib/array/Array#get:dataStart local.set $sourceStart i32.const 0 i32.const 1 @@ -76947,16 +77419,16 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 3 i32.shl i32.add local.set $ptr local.get $sourceStart local.get $i - i32.const 3 + i32.const 0 i32.shl i32.add - i64.load + i32.load8_s local.set $value i32.const 0 drop @@ -76964,8 +77436,8 @@ drop local.get $ptr local.get $value - f32.convert_i64_s - f32.store + f64.convert_i32_s + f64.store local.get $i i32.const 1 i32.add @@ -76978,7 +77450,301 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) + (func $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array> + (local $setSource4 i32) + (local $setSource5 i32) + (local $setSource6 i32) + (local $a i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 24 + memory.fill + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int64Array#constructor + local.tee $setSource4 + i32.store + local.get $setSource4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + i64.const 7 + call $~lib/typedarray/Int64Array#__set + local.get $setSource4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + i64.const 8 + call $~lib/typedarray/Int64Array#__set + local.get $setSource4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + i64.const 9 + call $~lib/typedarray/Int64Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $~lib/typedarray/Uint8Array#constructor + local.tee $setSource5 + i32.store offset=8 + local.get $setSource5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + i32.const 100 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + i32.const 101 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + i32.const 102 + call $~lib/typedarray/Uint8Array#__set + local.get $setSource5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3 + i32.const 103 + call $~lib/typedarray/Uint8Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int16Array#constructor + local.tee $setSource6 + i32.store offset=12 + local.get $setSource6 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 0 + i32.const 1000 + call $~lib/typedarray/Int16Array#__set + local.get $setSource6 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 1 + i32.const 1001 + call $~lib/typedarray/Int16Array#__set + local.get $setSource6 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + i32.const 1002 + call $~lib/typedarray/Int16Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/typedarray/Float64Array#constructor + local.tee $a + i32.store offset=16 + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + global.get $std/typedarray/setSource1 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 0 + call $~lib/typedarray/Float64Array#set<~lib/array/Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + i32.const 3 + i32.const 63 + i32.const 13760 + call $~lib/rt/__newArray + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + global.get $std/typedarray/setSource2 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 3 + call $~lib/typedarray/Float64Array#set<~lib/array/Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + i32.const 3 + i32.const 63 + i32.const 13920 + call $~lib/rt/__newArray + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $setSource4 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 6 + call $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + i32.const 3 + i32.const 63 + i32.const 14032 + call $~lib/rt/__newArray + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> + i32.const 0 + drop + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $setSource5 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 0 + call $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + local.get $setSource6 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 4 + call $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + global.get $std/typedarray/setSource7 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + i32.const 7 + call $~lib/typedarray/Float64Array#set<~lib/array/Array> + i32.const 0 + drop + local.get $a + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 10 + i32.const 3 + i32.const 63 + i32.const 14144 + call $~lib/rt/__newArray + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=20 + local.get $8 + call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -76987,7 +77753,7 @@ (local $sourceStart i32) (local $i i32) (local $ptr i32) - (local $value i32) + (local $value f32) (local $12 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -77018,7 +77784,7 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Uint8Array#get:length + call $~lib/typedarray/Float32Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -77035,13 +77801,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -77054,7 +77820,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 0 i32.shl i32.add local.set $targetStart @@ -77066,8 +77832,8 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart - i32.const 0 i32.const 1 + i32.const 0 i32.eq drop i32.const 0 @@ -77079,25 +77845,38 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 0 i32.shl i32.add local.set $ptr local.get $sourceStart local.get $i - i32.const 0 + i32.const 2 i32.shl i32.add - i32.load8_u + f32.load local.set $value - i32.const 0 + i32.const 1 drop - i32.const 0 + i32.const 1 drop local.get $ptr local.get $value - f32.convert_i32_u - f32.store + local.get $value + f32.sub + f32.const 0 + f32.eq + if (result i32) + f32.const 0 + f32.const 255 + local.get $value + f32.min + f32.max + i32.trunc_sat_f32_u + else + i32.const 0 + end + i32.store8 local.get $i i32.const 1 i32.add @@ -77110,7 +77889,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -77150,7 +77929,7 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Int32Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -77167,13 +77946,13 @@ local.get $12 i32.store offset=8 local.get $12 - call $~lib/typedarray/Float32Array#get:length + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -77186,7 +77965,7 @@ local.get $12 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 0 i32.shl i32.add local.set $targetStart @@ -77199,7 +77978,7 @@ call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart i32.const 0 - i32.const 1 + i32.const 2 i32.eq drop i32.const 0 @@ -77211,25 +77990,43 @@ if local.get $targetStart local.get $i - i32.const 2 + i32.const 0 i32.shl i32.add local.set $ptr local.get $sourceStart local.get $i - i32.const 1 + i32.const 2 i32.shl i32.add - i32.load16_s + i32.load local.set $value - i32.const 0 + i32.const 1 drop i32.const 0 drop + i32.const 1 + i32.eqz + drop + i32.const 1 + i32.const 4 + i32.le_u + drop local.get $ptr local.get $value - f32.convert_i32_s - f32.store + i32.const 31 + i32.shr_s + i32.const -1 + i32.xor + i32.const 255 + local.get $value + i32.sub + i32.const 31 + i32.shr_s + local.get $value + i32.or + i32.and + i32.store8 local.get $i i32.const 1 i32.add @@ -77242,7 +78039,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float32Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) + (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> (param $this i32) (param $source i32) (param $offset i32) (local $target i32) (local $source|4 i32) (local $offset|5 i32) @@ -77253,6 +78050,8 @@ (local $ptr i32) (local $value i32) (local $12 i32) + (local $13 i32) + (local $14 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -77277,12 +78076,12 @@ i32.const 0 drop local.get $source|4 - local.set $12 + local.set $14 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $14 i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:length + local.get $14 + call $~lib/typedarray/Uint32Array#get:length local.set $sourceLen local.get $offset|5 i32.const 0 @@ -77294,44 +78093,44 @@ local.get $offset|5 i32.add local.get $target - local.set $12 + local.set $14 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $14 i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float32Array#get:length + local.get $14 + call $~lib/typedarray/Uint8ClampedArray#get:length i32.gt_s end if i32.const 336 i32.const 608 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable end local.get $target - local.set $12 + local.set $14 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $14 i32.store offset=8 - local.get $12 + local.get $14 call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $offset|5 - i32.const 2 + i32.const 0 i32.shl i32.add local.set $targetStart local.get $source|4 - local.set $12 + local.set $14 global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $14 i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:dataStart + local.get $14 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.set $sourceStart i32.const 0 - i32.const 1 + i32.const 2 i32.eq drop i32.const 0 @@ -77341,344 +78140,564 @@ local.get $sourceLen i32.lt_s if - local.get $targetStart - local.get $i + local.get $targetStart + local.get $i + i32.const 0 + i32.shl + i32.add + local.set $ptr + local.get $sourceStart + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $value + i32.const 1 + drop + i32.const 0 + drop + i32.const 0 + i32.eqz + drop + local.get $ptr + i32.const 255 + local.tee $12 + local.get $value + local.tee $13 + local.get $12 + local.get $13 + i32.lt_u + select + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|0 + end + end + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (local $3 i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $a|7 i32) + (local $b|8 i32) + (local $c|9 i32) + (local $n i32) + (local $lgPlus2 i32) + (local $lgPlus2Size i32) + (local $leftRunStartBuf i32) + (local $leftRunEndBuf i32) + (local $i i32) + (local $buffer i32) + (local $hi i32) + (local $endA i32) + (local $lenA i32) + (local $20 i32) + (local $21 i32) + (local $top i32) + (local $startA i32) + (local $startB i32) + (local $endB i32) + (local $lenB i32) + (local $27 i32) + (local $28 i32) + (local $k i32) + (local $i|30 i32) + (local $start i32) + (local $i|32 i32) + (local $start|33 i32) + (local $34 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $len + i32.const 48 + i32.le_s + if + local.get $len + i32.const 1 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 0 + i32.const 1 + i32.lt_s + drop + block $break|0 + block $case1|0 + block $case0|0 + local.get $len + local.set $3 + local.get $3 + i32.const 3 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + br $break|0 + end + local.get $ptr + i32.load8_s + local.set $a + local.get $ptr + i32.load8_s offset=1 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store8 + local.get $a + local.get $b + local.get $c + select + local.set $a + local.get $ptr + i32.load8_s offset=2 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store8 offset=1 + local.get $ptr + local.get $a + local.get $b + local.get $c + select + i32.store8 offset=2 + end + local.get $ptr + i32.load8_s + local.set $a|7 + local.get $ptr + i32.load8_s offset=1 + local.set $b|8 + local.get $a|7 + local.get $b|8 + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c|9 + local.get $ptr + local.get $b|8 + local.get $a|7 + local.get $c|9 + select + i32.store8 + local.get $ptr + local.get $a|7 + local.get $b|8 + local.get $c|9 + select + i32.store8 offset=1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $ptr + i32.const 0 + local.get $len + i32.const 1 + i32.sub + i32.const 0 + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + block $~lib/util/sort/log2u|inlined.1 (result i32) + local.get $len + local.set $n + i32.const 31 + local.get $n + i32.clz + i32.sub + br $~lib/util/sort/log2u|inlined.1 + end + i32.const 2 + i32.add + local.set $lgPlus2 + local.get $lgPlus2 + i32.const 2 + i32.shl + local.set $lgPlus2Size + local.get $lgPlus2Size + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $leftRunStartBuf + local.get $leftRunStartBuf + local.get $lgPlus2Size + i32.add + local.set $leftRunEndBuf + i32.const 0 + local.set $i + loop $for-loop|1 + local.get $i + local.get $lgPlus2 + i32.lt_u + if + local.get $leftRunStartBuf + local.get $i + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|1 + end + end + local.get $len + i32.const 0 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $buffer + local.get $len + i32.const 1 + i32.sub + local.set $hi + local.get $ptr + i32.const 0 + local.get $hi + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endA + local.get $endA + i32.const 1 + i32.add + local.set $lenA + local.get $lenA + i32.const 32 + i32.lt_s + if + local.get $hi + local.tee $20 + i32.const 32 + i32.const 1 + i32.sub + local.tee $21 + local.get $20 + local.get $21 + i32.lt_s + select + local.set $endA + local.get $ptr + i32.const 0 + local.get $endA + local.get $lenA + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + end + i32.const 0 + local.set $top + i32.const 0 + local.set $startA + loop $while-continue|2 + local.get $endA + local.get $hi + i32.lt_s + if + local.get $endA + i32.const 1 + i32.add + local.set $startB + local.get $ptr + local.get $startB + local.get $hi + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endB + local.get $endB + local.get $startB + i32.sub + i32.const 1 + i32.add + local.set $lenB + local.get $lenB + i32.const 32 + i32.lt_s + if + local.get $hi + local.tee $27 + local.get $startB + i32.const 32 + i32.add + i32.const 1 + i32.sub + local.tee $28 + local.get $27 + local.get $28 + i32.lt_s + select + local.set $endB + local.get $ptr + local.get $startB + local.get $endB + local.get $lenB + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + end + i32.const 0 + local.get $hi + local.get $startA + local.get $startB + local.get $endB + call $~lib/util/sort/nodePower + local.set $k + local.get $top + local.set $i|30 + loop $for-loop|3 + local.get $i|30 + local.get $k + i32.gt_u + if + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $start + local.get $start + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start + local.get $leftRunEndBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $endA + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns + local.get $start + local.set $startA + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + end + local.get $i|30 + i32.const 1 + i32.sub + local.set $i|30 + br $for-loop|3 + end + end + local.get $leftRunStartBuf + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $startA + i32.store + local.get $leftRunEndBuf + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $endA + i32.store + local.get $startB + local.set $startA + local.get $endB + local.set $endA + local.get $k + local.set $top + br $while-continue|2 + end + end + local.get $top + local.set $i|32 + loop $for-loop|4 + local.get $i|32 + i32.const 0 + i32.ne + if + local.get $leftRunStartBuf + local.get $i|32 i32.const 2 i32.shl i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_s - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - f32.convert_i32_s - f32.store - local.get $i + i32.load + local.set $start|33 + local.get $start|33 + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start|33 + local.get $leftRunEndBuf + local.get $i|32 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $hi + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns + end + local.get $i|32 i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.sub + local.set $i|32 + br $for-loop|4 end end + local.get $buffer + call $~lib/rt/tlsf/__free + local.get $leftRunStartBuf + call $~lib/rt/tlsf/__free global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array> - (local $setSource4 i32) - (local $setSource5 i32) - (local $setSource6 i32) - (local $a i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) + (func $~lib/typedarray/Int8Array#sort (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 24 - memory.fill - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Int64Array#constructor - local.tee $setSource4 - i32.store - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 0 - i64.const 7 - call $~lib/typedarray/Int64Array#__set - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 1 - i64.const 8 - call $~lib/typedarray/Int64Array#__set - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 2 - i64.const 9 - call $~lib/typedarray/Int64Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 4 - call $~lib/typedarray/Uint8Array#constructor - local.tee $setSource5 - i32.store offset=8 - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 0 - i32.const 100 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 1 - i32.const 101 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 2 - i32.const 102 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 3 - i32.const 103 - call $~lib/typedarray/Uint8Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Int16Array#constructor - local.tee $setSource6 - i32.store offset=12 - local.get $setSource6 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 0 - i32.const 1000 - call $~lib/typedarray/Int16Array#__set - local.get $setSource6 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 1 - i32.const 1001 - call $~lib/typedarray/Int16Array#__set - local.get $setSource6 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 2 - i32.const 1002 - call $~lib/typedarray/Int16Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 10 - call $~lib/typedarray/Float32Array#constructor - local.tee $a - i32.store offset=16 - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource1 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 0 - call $~lib/typedarray/Float32Array#set<~lib/array/Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 2 - i32.const 62 - i32.const 13456 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource2 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 3 - call $~lib/typedarray/Float32Array#set<~lib/array/Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 2 - i32.const 62 - i32.const 13568 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 6 - call $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 2 - i32.const 62 - i32.const 13632 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> - i32.const 0 - drop - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 0 - call $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - local.get $setSource6 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 4 - call $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> - local.get $a - local.set $8 + i64.const 0 + i64.store + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource7 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 7 - call $~lib/typedarray/Float32Array#set<~lib/array/Array> - i32.const 0 - drop - local.get $a - local.set $8 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 2 - i32.const 62 - i32.const 13696 - call $~lib/rt/__newArray - local.set $8 + local.get $2 + call $~lib/typedarray/Int8Array#get:length + local.get $comparator + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> + local.get $2 + i32.store + local.get $2 + call $~lib/util/sort/SORT + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer + local.get $2 + return ) - (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (func $~lib/typedarray/Int8Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 i32.sub @@ -77690,689 +78709,815 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target - i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:dataStart - local.set $sourceStart - i32.const 0 - i32.const 1 - i32.eq - drop - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $value - i32.const 0 - drop - i32.const 0 + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + i32.const 1 drop - local.get $ptr - local.get $value - f64.convert_i32_s - f64.store - local.get $i i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.const 4 + i32.le_u + drop + i32.const 14320 + br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $comparator + i32.store end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $comparator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/typedarray/Int8Array#sort + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/typedarray/Float64Array#__uget (param $this i32) (param $index i32) (result f64) + (func $"std/typedarray/testArraySort<~lib/typedarray/Int8Array,i8>" + (local $source i32) + (local $result i32) (local $2 i32) - (local $3 f64) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer i32.const 0 + i32.const 3 + call $~lib/typedarray/Int8Array#constructor + local.tee $source i32.store - local.get $this + local.get $source local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store offset=4 local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $index + i32.const 2 + i32.const 1 + call $~lib/typedarray/Int8Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int8Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 i32.const 3 - i32.shl - i32.add - f64.load - local.set $3 + call $~lib/typedarray/Int8Array#__set global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $~lib/array/Array#__uget (param $this i32) (param $index i32) (result f64) - (local $2 i32) - (local $3 f64) + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#sort@varargs + local.tee $result + i32.store offset=8 + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - i32.store - local.get $this + call $~lib/typedarray/Int8Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 - i32.store + i32.store offset=4 local.get $2 - call $~lib/array/Array#get:dataStart - local.get $index + i32.const 1 + call $~lib/typedarray/Int8Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 886 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Int8Array#__get i32.const 3 - i32.shl - i32.add - f64.load - local.set $3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 887 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $3 - return - ) - (func $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> (param $target i32) (param $compare i32) - (local $len i32) - (local $i i32) - (local $vala f64) - (local $valb f64) - (local $6 i32) + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 14352 + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/typedarray/Int8Array#sort + drop + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - i32.store - local.get $target - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - call $~lib/typedarray/Float64Array#get:length - local.set $len - local.get $len - local.get $compare - local.set $6 + call $~lib/typedarray/Int8Array#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 889 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - call $~lib/array/Array#get:length + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/typedarray/Int8Array#__get + i32.const 2 i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 758 + i32.const 890 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $len - i32.lt_s - if - local.get $target - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - local.get $i - call $~lib/typedarray/Float64Array#__uget - local.set $vala - local.get $compare - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - local.get $6 - local.get $i - call $~lib/array/Array#__uget - local.set $valb - local.get $vala - local.get $valb - f64.ne - if - i32.const 13872 - i32.const 3 - local.get $i - f64.convert_i32_s - local.get $vala - local.get $valb - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - i32.const 0 - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 764 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - end - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Int8Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 16 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (local $3 i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $a|7 i32) + (local $b|8 i32) + (local $c|9 i32) + (local $n i32) + (local $lgPlus2 i32) + (local $lgPlus2Size i32) + (local $leftRunStartBuf i32) + (local $leftRunEndBuf i32) (local $i i32) - (local $ptr i32) - (local $value f32) - (local $12 i32) + (local $buffer i32) + (local $hi i32) + (local $endA i32) + (local $lenA i32) + (local $20 i32) + (local $21 i32) + (local $top i32) + (local $startA i32) + (local $startB i32) + (local $endB i32) + (local $lenB i32) + (local $27 i32) + (local $28 i32) + (local $k i32) + (local $i|30 i32) + (local $start i32) + (local $i|32 i32) + (local $start|33 i32) + (local $34 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) + local.get $len + i32.const 48 + i32.le_s + if + local.get $len i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 0 + i32.const 1 + i32.lt_s + drop + block $break|0 + block $case1|0 + block $case0|0 + local.get $len + local.set $3 + local.get $3 + i32.const 3 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + br $break|0 + end + local.get $ptr + i32.load8_u + local.set $a + local.get $ptr + i32.load8_u offset=1 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store8 + local.get $a + local.get $b + local.get $c + select + local.set $a + local.get $ptr + i32.load8_u offset=2 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store8 offset=1 + local.get $ptr + local.get $a + local.get $b + local.get $c + select + i32.store8 offset=2 + end + local.get $ptr + i32.load8_u + local.set $a|7 + local.get $ptr + i32.load8_u offset=1 + local.set $b|8 + local.get $a|7 + local.get $b|8 + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c|9 + local.get $ptr + local.get $b|8 + local.get $a|7 + local.get $c|9 + select + i32.store8 + local.get $ptr + local.get $a|7 + local.get $b|8 + local.get $c|9 + select + i32.store8 offset=1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $ptr + i32.const 0 + local.get $len + i32.const 1 + i32.sub + i32.const 0 + local.get $comparator + local.set $34 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable + block $~lib/util/sort/log2u|inlined.2 (result i32) + local.get $len + local.set $n + i32.const 31 + local.get $n + i32.clz + i32.sub + br $~lib/util/sort/log2u|inlined.2 end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl + i32.const 2 i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:dataStart - local.set $sourceStart - i32.const 3 + local.set $lgPlus2 + local.get $lgPlus2 i32.const 2 - i32.eq - drop + i32.shl + local.set $lgPlus2Size + local.get $lgPlus2Size + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $leftRunStartBuf + local.get $leftRunStartBuf + local.get $lgPlus2Size + i32.add + local.set $leftRunEndBuf i32.const 0 local.set $i - loop $for-loop|0 + loop $for-loop|1 local.get $i - local.get $sourceLen - i32.lt_s + local.get $lgPlus2 + i32.lt_u if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart + local.get $leftRunStartBuf local.get $i i32.const 2 i32.shl i32.add - f32.load - local.set $value - i32.const 0 - drop - i32.const 1 - i32.eqz - drop - local.get $ptr - local.get $value - f64.promote_f32 - f64.store + i32.const -1 + i32.store local.get $i i32.const 1 i32.add local.set $i - br $for-loop|0 + br $for-loop|1 end end - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i64) - (local $12 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $len + i32.const 0 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $buffer + local.get $len + i32.const 1 i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer + local.set $hi + local.get $ptr i32.const 0 - i32.store offset=8 + local.get $hi + local.get $comparator + local.set $34 global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target + local.get $34 i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Int64Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endA + local.get $endA + i32.const 1 + i32.add + local.set $lenA + local.get $lenA + i32.const 32 i32.lt_s - if (result i32) + if + local.get $hi + local.tee $20 + i32.const 32 i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 + i32.sub + local.tee $21 + local.get $20 + local.get $21 + i32.lt_s + select + local.set $endA + local.get $ptr + i32.const 0 + local.get $endA + local.get $lenA + local.get $comparator + local.set $34 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart i32.const 0 - i32.const 1 - i32.eq - drop + local.set $top i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen + local.set $startA + loop $while-continue|2 + local.get $endA + local.get $hi i32.lt_s if - local.get $targetStart - local.get $i - i32.const 3 + local.get $endA + i32.const 1 + i32.add + local.set $startB + local.get $ptr + local.get $startB + local.get $hi + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endB + local.get $endB + local.get $startB + i32.sub + i32.const 1 + i32.add + local.set $lenB + local.get $lenB + i32.const 32 + i32.lt_s + if + local.get $hi + local.tee $27 + local.get $startB + i32.const 32 + i32.add + i32.const 1 + i32.sub + local.tee $28 + local.get $27 + local.get $28 + i32.lt_s + select + local.set $endB + local.get $ptr + local.get $startB + local.get $endB + local.get $lenB + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + end + i32.const 0 + local.get $hi + local.get $startA + local.get $startB + local.get $endB + call $~lib/util/sort/nodePower + local.set $k + local.get $top + local.set $i|30 + loop $for-loop|3 + local.get $i|30 + local.get $k + i32.gt_u + if + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $start + local.get $start + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start + local.get $leftRunEndBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $endA + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns + local.get $start + local.set $startA + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + end + local.get $i|30 + i32.const 1 + i32.sub + local.set $i|30 + br $for-loop|3 + end + end + local.get $leftRunStartBuf + local.get $k + i32.const 2 i32.shl i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 3 + local.get $startA + i32.store + local.get $leftRunEndBuf + local.get $k + i32.const 2 i32.shl i32.add - i64.load - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - f64.convert_i64_s - f64.store - local.get $i - i32.const 1 + local.get $endA + i32.store + local.get $startB + local.set $startA + local.get $endB + local.set $endA + local.get $k + local.set $top + br $while-continue|2 + end + end + local.get $top + local.set $i|32 + loop $for-loop|4 + local.get $i|32 + i32.const 0 + i32.ne + if + local.get $leftRunStartBuf + local.get $i|32 + i32.const 2 + i32.shl i32.add - local.set $i - br $for-loop|0 + i32.load + local.set $start|33 + local.get $start|33 + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start|33 + local.get $leftRunEndBuf + local.get $i|32 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $hi + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns + end + local.get $i|32 + i32.const 1 + i32.sub + local.set $i|32 + br $for-loop|4 end end + local.get $buffer + call $~lib/rt/tlsf/__free + local.get $leftRunStartBuf + call $~lib/rt/tlsf/__free global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (func $~lib/typedarray/Uint8Array#sort (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer local.get $this - local.tee $target - i32.store + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 + local.get $2 i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 + local.get $2 + i32.store offset=4 + local.get $2 call $~lib/typedarray/Uint8Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 + local.get $comparator + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl + local.get $2 + i32.store + local.get $2 + call $~lib/util/sort/SORT + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.add - local.set $targetStart - local.get $source|4 - local.set $12 + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Uint8Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart - i32.const 0 - i32.const 1 - i32.eq - drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.set $value - i32.const 0 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + i32.const 1 drop i32.const 0 drop - local.get $ptr - local.get $value - f64.convert_i32_u - f64.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.const 14384 + br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $comparator + i32.store end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $comparator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/typedarray/Uint8Array#sort + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (func $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>" + (local $source i32) + (local $result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -78380,854 +79525,1049 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target + i32.const 0 + i32.const 3 + call $~lib/typedarray/Uint8Array#constructor + local.tee $source i32.store + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + i32.const 1 + call $~lib/typedarray/Uint8Array#__set local.get $source - local.tee $source|4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 i32.store offset=4 - local.get $offset - local.set $offset|5 + local.get $2 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Uint8Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - drop - local.get $source|4 - local.set $12 + i32.const 3 + call $~lib/typedarray/Uint8Array#__set global.get $~lib/memory/__stack_pointer - local.get $12 + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8Array#sort@varargs + local.tee $result i32.store offset=8 - local.get $12 - call $~lib/typedarray/Int16Array#get:length - local.set $sourceLen - local.get $offset|5 + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s + call $~lib/typedarray/Uint8Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/typedarray/Uint8Array#__get + i32.const 2 + i32.eq + i32.eqz if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 + i32.const 0 + i32.const 544 + i32.const 886 + i32.const 3 call $~lib/builtins/abort unreachable end - local.get $target - local.set $12 + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Uint8Array#__get i32.const 3 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 887 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 14416 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/typedarray/Uint8Array#sort + drop + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 + call $~lib/typedarray/Uint8Array#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 889 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 1 + call $~lib/typedarray/Uint8Array#__get + i32.const 2 i32.eq - drop - i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.set $value - i32.const 0 - drop - i32.const 0 - drop - local.get $ptr - local.get $value - f64.convert_i32_s - f64.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 890 + i32.const 3 + call $~lib/builtins/abort + unreachable end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Uint8Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Float64Array#set<~lib/array/Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (func $~lib/typedarray/Uint8ClampedArray#sort (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $this - local.tee $target - i32.store + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 + local.get $2 i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 + local.get $2 + call $~lib/typedarray/Uint8ClampedArray#get:length + local.get $comparator + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float64Array#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 + local.get $2 + i32.store + local.get $2 + call $~lib/util/sort/SORT + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 3 - i32.shl + i32.const 8 i32.add - local.set $targetStart - local.get $source|4 - local.set $12 + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Uint8ClampedArray#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/array/Array#get:dataStart - local.set $sourceStart - i32.const 0 - i32.const 1 - i32.eq - drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 3 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_s - local.set $value - i32.const 0 + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + block $~lib/util/sort/COMPARATOR|inlined.1 (result i32) + i32.const 1 drop i32.const 0 drop - local.get $ptr - local.get $value - f64.convert_i32_s - f64.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.const 14448 + br $~lib/util/sort/COMPARATOR|inlined.1 end + local.tee $comparator + i32.store end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $comparator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/typedarray/Uint8ClampedArray#sort + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array> - (local $setSource4 i32) - (local $setSource5 i32) - (local $setSource6 i32) - (local $a i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) + (func $"std/typedarray/testArraySort<~lib/typedarray/Uint8ClampedArray,u8>" + (local $source i32) + (local $result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 24 - memory.fill + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Int64Array#constructor - local.tee $setSource4 + call $~lib/typedarray/Uint8ClampedArray#constructor + local.tee $source i32.store - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 0 - i64.const 7 - call $~lib/typedarray/Int64Array#__set - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 1 - i64.const 8 - call $~lib/typedarray/Int64Array#__set - local.get $setSource4 - local.set $8 + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 + local.get $2 i32.const 2 - i64.const 9 - call $~lib/typedarray/Int64Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 4 - call $~lib/typedarray/Uint8Array#constructor - local.tee $setSource5 - i32.store offset=8 - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 0 - i32.const 100 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 i32.const 1 - i32.const 101 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 + local.get $2 + i32.const 1 i32.const 2 - i32.const 102 - call $~lib/typedarray/Uint8Array#__set - local.get $setSource5 - local.set $8 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - i32.const 3 - i32.const 103 - call $~lib/typedarray/Uint8Array#__set - global.get $~lib/memory/__stack_pointer + local.get $2 i32.const 0 i32.const 3 - call $~lib/typedarray/Int16Array#constructor - local.tee $setSource6 - i32.store offset=12 - local.get $setSource6 - local.set $8 + call $~lib/typedarray/Uint8ClampedArray#__set global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 i32.store offset=4 - local.get $8 + local.get $2 i32.const 0 - i32.const 1000 - call $~lib/typedarray/Int16Array#__set - local.get $setSource6 - local.set $8 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8ClampedArray#sort@varargs + local.tee $result + i32.store offset=8 + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 + local.get $2 + i32.const 0 + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 1 - i32.const 1001 - call $~lib/typedarray/Int16Array#__set - local.get $setSource6 - local.set $8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 + local.get $2 + i32.const 1 + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 2 - i32.const 1002 - call $~lib/typedarray/Int16Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 10 - call $~lib/typedarray/Float64Array#constructor - local.tee $a - i32.store offset=16 - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource1 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 0 - call $~lib/typedarray/Float64Array#set<~lib/array/Array> - local.get $a - local.set $8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 886 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - i32.const 10 + local.get $2 + i32.const 2 + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 3 - i32.const 63 - i32.const 13760 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> - local.get $a - local.set $8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 887 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource2 - local.set $8 + local.get $2 + i32.const 14480 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 3 - call $~lib/typedarray/Float64Array#set<~lib/array/Array> - local.get $a - local.set $8 + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/typedarray/Uint8ClampedArray#sort + drop + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - i32.const 10 + local.get $2 + i32.const 0 + call $~lib/typedarray/Uint8ClampedArray#__get i32.const 3 - i32.const 63 - i32.const 13920 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - local.get $setSource4 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 6 - call $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> - local.get $a - local.set $8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 889 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 3 - i32.const 63 - i32.const 14032 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> - i32.const 0 - drop - local.get $a - local.set $8 + local.get $2 + i32.const 1 + call $~lib/typedarray/Uint8ClampedArray#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 890 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $2 i32.store offset=4 - local.get $8 - local.get $setSource5 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 0 - call $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> - local.get $a - local.set $8 + local.get $2 + i32.const 2 + call $~lib/typedarray/Uint8ClampedArray#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - local.get $setSource6 - local.set $8 + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (local $3 i32) + (local $a i32) + (local $b i32) + (local $c i32) + (local $a|7 i32) + (local $b|8 i32) + (local $c|9 i32) + (local $n i32) + (local $lgPlus2 i32) + (local $lgPlus2Size i32) + (local $leftRunStartBuf i32) + (local $leftRunEndBuf i32) + (local $i i32) + (local $buffer i32) + (local $hi i32) + (local $endA i32) + (local $lenA i32) + (local $20 i32) + (local $21 i32) + (local $top i32) + (local $startA i32) + (local $startB i32) + (local $endB i32) + (local $lenB i32) + (local $27 i32) + (local $28 i32) + (local $k i32) + (local $i|30 i32) + (local $start i32) + (local $i|32 i32) + (local $start|33 i32) + (local $34 i32) global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 i32.const 4 - call $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - global.get $std/typedarray/setSource7 - local.set $8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - i32.const 7 - call $~lib/typedarray/Float64Array#set<~lib/array/Array> i32.const 0 - drop - local.get $a - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 10 - i32.const 3 - i32.const 63 - i32.const 14144 - call $~lib/rt/__newArray - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=20 - local.get $8 - call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> - global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.store + local.get $len + i32.const 48 + i32.le_s + if + local.get $len + i32.const 1 + i32.le_s + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 0 + i32.const 1 + i32.lt_s + drop + block $break|0 + block $case1|0 + block $case0|0 + local.get $len + local.set $3 + local.get $3 + i32.const 3 + i32.eq + br_if $case0|0 + local.get $3 + i32.const 2 + i32.eq + br_if $case1|0 + br $break|0 + end + local.get $ptr + i32.load16_s + local.set $a + local.get $ptr + i32.load16_s offset=2 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store16 + local.get $a + local.get $b + local.get $c + select + local.set $a + local.get $ptr + i32.load16_s offset=4 + local.set $b + local.get $a + local.get $b + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c + local.get $ptr + local.get $b + local.get $a + local.get $c + select + i32.store16 offset=2 + local.get $ptr + local.get $a + local.get $b + local.get $c + select + i32.store16 offset=4 + end + local.get $ptr + i32.load16_s + local.set $a|7 + local.get $ptr + i32.load16_s offset=2 + local.set $b|8 + local.get $a|7 + local.get $b|8 + i32.const 2 + global.set $~argumentsLength + local.get $comparator + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s + local.set $c|9 + local.get $ptr + local.get $b|8 + local.get $a|7 + local.get $c|9 + select + i32.store16 + local.get $ptr + local.get $a|7 + local.get $b|8 + local.get $c|9 + select + i32.store16 offset=2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $ptr + i32.const 0 + local.get $len + i32.const 1 + i32.sub + i32.const 0 + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + block $~lib/util/sort/log2u|inlined.3 (result i32) + local.get $len + local.set $n + i32.const 31 + local.get $n + i32.clz + i32.sub + br $~lib/util/sort/log2u|inlined.3 + end + i32.const 2 i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value f32) - (local $12 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 + local.set $lgPlus2 + local.get $lgPlus2 + i32.const 2 + i32.shl + local.set $lgPlus2Size + local.get $lgPlus2Size + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $leftRunStartBuf + local.get $leftRunStartBuf + local.get $lgPlus2Size + i32.add + local.set $leftRunEndBuf + i32.const 0 + local.set $i + loop $for-loop|1 + local.get $i + local.get $lgPlus2 + i32.lt_u + if + local.get $leftRunStartBuf + local.get $i + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + br $for-loop|1 + end + end + local.get $len + i32.const 1 + i32.shl + call $~lib/rt/tlsf/__alloc + local.set $buffer + local.get $len + i32.const 1 i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer + local.set $hi + local.get $ptr i32.const 0 - i32.store offset=8 + local.get $hi + local.get $comparator + local.set $34 global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target + local.get $34 i32.store - global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 - i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Float32Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endA + local.get $endA + i32.const 1 + i32.add + local.set $lenA + local.get $lenA + i32.const 32 i32.lt_s - if (result i32) + if + local.get $hi + local.tee $20 + i32.const 32 i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 + i32.sub + local.tee $21 + local.get $20 + local.get $21 + i32.lt_s + select + local.set $endA + local.get $ptr + i32.const 0 + local.get $endA + local.get $lenA + local.get $comparator + local.set $34 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort end - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 0 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart - i32.const 1 i32.const 0 - i32.eq - drop + local.set $top i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen + local.set $startA + loop $while-continue|2 + local.get $endA + local.get $hi i32.lt_s if - local.get $targetStart - local.get $i + local.get $endA + i32.const 1 + i32.add + local.set $startB + local.get $ptr + local.get $startB + local.get $hi + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/extendRunRight + local.set $endB + local.get $endB + local.get $startB + i32.sub + i32.const 1 + i32.add + local.set $lenB + local.get $lenB + i32.const 32 + i32.lt_s + if + local.get $hi + local.tee $27 + local.get $startB + i32.const 32 + i32.add + i32.const 1 + i32.sub + local.tee $28 + local.get $27 + local.get $28 + i32.lt_s + select + local.set $endB + local.get $ptr + local.get $startB + local.get $endB + local.get $lenB + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/insertionSort + end i32.const 0 + local.get $hi + local.get $startA + local.get $startB + local.get $endB + call $~lib/util/sort/nodePower + local.set $k + local.get $top + local.set $i|30 + loop $for-loop|3 + local.get $i|30 + local.get $k + i32.gt_u + if + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $start + local.get $start + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start + local.get $leftRunEndBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $endA + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns + local.get $start + local.set $startA + local.get $leftRunStartBuf + local.get $i|30 + i32.const 2 + i32.shl + i32.add + i32.const -1 + i32.store + end + local.get $i|30 + i32.const 1 + i32.sub + local.set $i|30 + br $for-loop|3 + end + end + local.get $leftRunStartBuf + local.get $k + i32.const 2 i32.shl i32.add - local.set $ptr - local.get $sourceStart - local.get $i + local.get $startA + i32.store + local.get $leftRunEndBuf + local.get $k i32.const 2 i32.shl i32.add - f32.load - local.set $value - i32.const 1 - drop - i32.const 1 - drop - local.get $ptr - local.get $value - local.get $value - f32.sub - f32.const 0 - f32.eq - if (result i32) - f32.const 0 - f32.const 255 - local.get $value - f32.min - f32.max - i32.trunc_sat_f32_u - else - i32.const 0 + local.get $endA + i32.store + local.get $startB + local.set $startA + local.get $endB + local.set $endA + local.get $k + local.set $top + br $while-continue|2 + end + end + local.get $top + local.set $i|32 + loop $for-loop|4 + local.get $i|32 + i32.const 0 + i32.ne + if + local.get $leftRunStartBuf + local.get $i|32 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $start|33 + local.get $start|33 + i32.const -1 + i32.ne + if + local.get $ptr + local.get $start|33 + local.get $leftRunEndBuf + local.get $i|32 + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 1 + i32.add + local.get $hi + local.get $buffer + local.get $comparator + local.set $34 + global.get $~lib/memory/__stack_pointer + local.get $34 + i32.store + local.get $34 + call $~lib/util/sort/mergeRuns end - i32.store8 - local.get $i + local.get $i|32 i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.sub + local.set $i|32 + br $for-loop|4 end end + local.get $buffer + call $~lib/rt/tlsf/__free + local.get $leftRunStartBuf + call $~lib/rt/tlsf/__free global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) + (func $~lib/typedarray/Int16Array#sort (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i64.const 0 i64.store + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/arraybuffer/ArrayBufferView#get:dataStart local.get $this - local.tee $target - i32.store + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $source - local.tee $source|4 + local.get $2 i32.store offset=4 - local.get $offset - local.set $offset|5 - i32.const 0 - drop - local.get $source|4 - local.set $12 + local.get $2 + call $~lib/typedarray/Int16Array#get:length + local.get $comparator + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Int32Array#get:length - local.set $sourceLen - local.get $offset|5 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $12 - global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/typedarray/Uint8ClampedArray#get:length - i32.gt_s - end - if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $target - local.set $12 + local.get $2 + i32.store + local.get $2 + call $~lib/util/sort/SORT + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 0 - i32.shl + i32.const 8 i32.add - local.set $targetStart - local.get $source|4 - local.set $12 + global.set $~lib/memory/__stack_pointer + local.get $2 + return + ) + (func $~lib/typedarray/Int16Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $12 - i32.store offset=8 - local.get $12 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart - i32.const 0 - i32.const 2 - i32.eq - drop i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 0 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $value - i32.const 1 - drop - i32.const 0 - drop + i32.store offset=8 + block $1of1 + block $0of1 + block $outOfRange + global.get $~argumentsLength + br_table $0of1 $1of1 $outOfRange + end + unreachable + end + global.get $~lib/memory/__stack_pointer + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 - i32.eqz drop - i32.const 1 + i32.const 2 i32.const 4 i32.le_u drop - local.get $ptr - local.get $value - i32.const 31 - i32.shr_s - i32.const -1 - i32.xor - i32.const 255 - local.get $value - i32.sub - i32.const 31 - i32.shr_s - local.get $value - i32.or - i32.and - i32.store8 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 + i32.const 14512 + br $~lib/util/sort/COMPARATOR|inlined.0 end + local.tee $comparator + i32.store end + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + local.get $comparator + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + local.get $2 + call $~lib/typedarray/Int16Array#sort + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $2 ) - (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> (param $this i32) (param $source i32) (param $offset i32) - (local $target i32) - (local $source|4 i32) - (local $offset|5 i32) - (local $sourceLen i32) - (local $targetStart i32) - (local $sourceStart i32) - (local $i i32) - (local $ptr i32) - (local $value i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) + (func $"std/typedarray/testArraySort<~lib/typedarray/Int16Array,i16>" + (local $source i32) + (local $result i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 16 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -79235,128 +80575,188 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $this - local.tee $target + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int16Array#constructor + local.tee $source i32.store + local.get $source + local.set $2 global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + i32.const 1 + call $~lib/typedarray/Int16Array#__set local.get $source - local.tee $source|4 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 i32.store offset=4 - local.get $offset - local.set $offset|5 + local.get $2 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int16Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - drop - local.get $source|4 - local.set $14 + i32.const 3 + call $~lib/typedarray/Int16Array#__set global.get $~lib/memory/__stack_pointer - local.get $14 + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int16Array#sort@varargs + local.tee $result i32.store offset=8 - local.get $14 - call $~lib/typedarray/Uint32Array#get:length - local.set $sourceLen - local.get $offset|5 + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $sourceLen - local.get $offset|5 - i32.add - local.get $target - local.set $14 - global.get $~lib/memory/__stack_pointer - local.get $14 - i32.store offset=8 - local.get $14 - call $~lib/typedarray/Uint8ClampedArray#get:length - i32.gt_s - end + call $~lib/typedarray/Int16Array#__get + i32.const 1 + i32.eq + i32.eqz if - i32.const 336 - i32.const 608 - i32.const 1902 - i32.const 5 + i32.const 0 + i32.const 544 + i32.const 885 + i32.const 3 call $~lib/builtins/abort unreachable end - local.get $target - local.set $14 + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $14 - i32.store offset=8 - local.get $14 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $offset|5 - i32.const 0 - i32.shl - i32.add - local.set $targetStart - local.get $source|4 - local.set $14 + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/typedarray/Int16Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 886 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $14 - i32.store offset=8 - local.get $14 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.set $sourceStart - i32.const 0 + local.get $2 + i32.store offset=4 + local.get $2 i32.const 2 + call $~lib/typedarray/Int16Array#__get + i32.const 3 i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 887 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 14544 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/typedarray/Int16Array#sort drop + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 0 - local.set $i - loop $for-loop|0 - local.get $i - local.get $sourceLen - i32.lt_s - if - local.get $targetStart - local.get $i - i32.const 0 - i32.shl - i32.add - local.set $ptr - local.get $sourceStart - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $value - i32.const 1 - drop - i32.const 0 - drop - i32.const 0 - i32.eqz - drop - local.get $ptr - i32.const 255 - local.tee $12 - local.get $value - local.tee $13 - local.get $12 - local.get $13 - i32.lt_u - select - i32.store8 - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|0 - end + call $~lib/typedarray/Int16Array#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 889 + i32.const 3 + call $~lib/builtins/abort + unreachable end + local.get $result + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/typedarray/Int16Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 890 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Int16Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) (local $a i32) (local $b i32) @@ -79431,10 +80831,10 @@ br $break|0 end local.get $ptr - i32.load8_s + i32.load16_u local.set $a local.get $ptr - i32.load8_s offset=1 + i32.load16_u offset=2 local.set $b local.get $a local.get $b @@ -79451,14 +80851,14 @@ local.get $a local.get $c select - i32.store8 + i32.store16 local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load8_s offset=2 + i32.load16_u offset=4 local.set $b local.get $a local.get $b @@ -79475,19 +80875,19 @@ local.get $a local.get $c select - i32.store8 offset=1 + i32.store16 offset=2 local.get $ptr local.get $a local.get $b local.get $c select - i32.store8 offset=2 + i32.store16 offset=4 end local.get $ptr - i32.load8_s + i32.load16_u local.set $a|7 local.get $ptr - i32.load8_s offset=1 + i32.load16_u offset=2 local.set $b|8 local.get $a|7 local.get $b|8 @@ -79504,13 +80904,13 @@ local.get $a|7 local.get $c|9 select - i32.store8 + i32.store16 local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store8 offset=1 + i32.store16 offset=2 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -79529,21 +80929,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.1 (result i32) + block $~lib/util/sort/log2u|inlined.4 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.1 + br $~lib/util/sort/log2u|inlined.4 end i32.const 2 i32.add @@ -79583,7 +80983,7 @@ end end local.get $len - i32.const 0 + i32.const 1 i32.shl call $~lib/rt/tlsf/__alloc local.set $buffer @@ -79600,7 +81000,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -79631,7 +81031,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -79655,7 +81055,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -79690,7 +81090,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -79735,7 +81135,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -79812,7 +81212,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -79830,7 +81230,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int8Array#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint16Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -79853,14 +81253,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int8Array#get:length + call $~lib/typedarray/Uint16Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -79870,7 +81270,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int8Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint16Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -79892,15 +81292,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 drop - i32.const 1 - i32.const 4 - i32.le_u + i32.const 0 drop - i32.const 14320 - br $~lib/util/sort/COMPARATOR|inlined.0 + i32.const 14576 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -79917,7 +81315,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Int8Array#sort + call $~lib/typedarray/Uint16Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -79925,7 +81323,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Int8Array,i8>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Uint16Array,u16>" (local $source i32) (local $result i32) (local $2 i32) @@ -79943,7 +81341,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Int8Array#constructor + call $~lib/typedarray/Uint16Array#constructor local.tee $source i32.store local.get $source @@ -79954,7 +81352,7 @@ local.get $2 i32.const 2 i32.const 1 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -79963,7 +81361,7 @@ local.get $2 i32.const 1 i32.const 2 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Uint16Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -79972,7 +81370,7 @@ local.get $2 i32.const 0 i32.const 3 - call $~lib/typedarray/Int8Array#__set + call $~lib/typedarray/Uint16Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -79983,7 +81381,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int8Array#sort@varargs + call $~lib/typedarray/Uint16Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -79993,7 +81391,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 1 i32.eq i32.eqz @@ -80012,7 +81410,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 2 i32.eq i32.eqz @@ -80031,7 +81429,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 3 i32.eq i32.eqz @@ -80049,13 +81447,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14352 + i32.const 14608 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Int8Array#sort + call $~lib/typedarray/Uint16Array#sort drop local.get $result local.set $2 @@ -80064,7 +81462,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 3 i32.eq i32.eqz @@ -80083,7 +81481,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 2 i32.eq i32.eqz @@ -80102,7 +81500,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int8Array#__get + call $~lib/typedarray/Uint16Array#__get i32.const 1 i32.eq i32.eqz @@ -80119,7 +81517,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) (local $a i32) (local $b i32) @@ -80194,10 +81592,10 @@ br $break|0 end local.get $ptr - i32.load8_u + i32.load local.set $a local.get $ptr - i32.load8_u offset=1 + i32.load offset=4 local.set $b local.get $a local.get $b @@ -80214,14 +81612,14 @@ local.get $a local.get $c select - i32.store8 + i32.store local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load8_u offset=2 + i32.load offset=8 local.set $b local.get $a local.get $b @@ -80238,19 +81636,19 @@ local.get $a local.get $c select - i32.store8 offset=1 + i32.store offset=4 local.get $ptr local.get $a local.get $b local.get $c select - i32.store8 offset=2 + i32.store offset=8 end local.get $ptr - i32.load8_u + i32.load local.set $a|7 local.get $ptr - i32.load8_u offset=1 + i32.load offset=4 local.set $b|8 local.get $a|7 local.get $b|8 @@ -80267,13 +81665,13 @@ local.get $a|7 local.get $c|9 select - i32.store8 + i32.store local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store8 offset=1 + i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -80292,21 +81690,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.2 (result i32) + block $~lib/util/sort/log2u|inlined.5 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.2 + br $~lib/util/sort/log2u|inlined.5 end i32.const 2 i32.add @@ -80346,7 +81744,7 @@ end end local.get $len - i32.const 0 + i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc local.set $buffer @@ -80363,7 +81761,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -80394,7 +81792,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -80418,7 +81816,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -80453,7 +81851,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -80498,7 +81896,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -80575,7 +81973,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -80593,294 +81991,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint8Array#sort (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - call $~lib/typedarray/Uint8Array#get:length - local.get $comparator - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/sort/SORT - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $~lib/typedarray/Uint8Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) - i32.const 1 - drop - i32.const 0 - drop - i32.const 14384 - br $~lib/util/sort/COMPARATOR|inlined.0 - end - local.tee $comparator - i32.store - end - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - local.get $comparator - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - local.get $2 - call $~lib/typedarray/Uint8Array#sort - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>" - (local $source i32) - (local $result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Uint8Array#constructor - local.tee $source - i32.store - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 2 - i32.const 1 - call $~lib/typedarray/Uint8Array#__set - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Uint8Array#__set - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - i32.const 3 - call $~lib/typedarray/Uint8Array#__set - global.get $~lib/memory/__stack_pointer - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Uint8Array#sort@varargs - local.tee $result - i32.store offset=8 - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Uint8Array#__get - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 885 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Uint8Array#__get - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 886 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Uint8Array#__get - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 887 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 14416 - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=12 - local.get $2 - call $~lib/typedarray/Uint8Array#sort - drop - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Uint8Array#__get - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 889 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Uint8Array#__get - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 890 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Uint8Array#__get - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 891 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint8ClampedArray#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Int32Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -80903,14 +82014,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint8ClampedArray#get:length + call $~lib/typedarray/Int32Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -80920,7 +82031,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint8ClampedArray#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Int32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -80942,13 +82053,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.1 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 drop - i32.const 0 + i32.const 4 + i32.const 4 + i32.le_u drop - i32.const 14448 - br $~lib/util/sort/COMPARATOR|inlined.1 + i32.const 14640 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -80965,7 +82078,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Uint8ClampedArray#sort + call $~lib/typedarray/Int32Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -80973,7 +82086,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Uint8ClampedArray,u8>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Int32Array,i32>" (local $source i32) (local $result i32) (local $2 i32) @@ -80991,7 +82104,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#constructor + call $~lib/typedarray/Int32Array#constructor local.tee $source i32.store local.get $source @@ -81002,7 +82115,7 @@ local.get $2 i32.const 2 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -81011,7 +82124,7 @@ local.get $2 i32.const 1 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -81020,7 +82133,7 @@ local.get $2 i32.const 0 i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#__set + call $~lib/typedarray/Int32Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -81031,7 +82144,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#sort@varargs + call $~lib/typedarray/Int32Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -81041,7 +82154,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 1 i32.eq i32.eqz @@ -81060,7 +82173,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 2 i32.eq i32.eqz @@ -81079,7 +82192,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 3 i32.eq i32.eqz @@ -81097,13 +82210,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14480 + i32.const 14672 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Uint8ClampedArray#sort + call $~lib/typedarray/Int32Array#sort drop local.get $result local.set $2 @@ -81112,7 +82225,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 3 i32.eq i32.eqz @@ -81131,7 +82244,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 2 i32.eq i32.eqz @@ -81150,7 +82263,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__get + call $~lib/typedarray/Int32Array#__get i32.const 1 i32.eq i32.eqz @@ -81167,7 +82280,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) (local $a i32) (local $b i32) @@ -81242,10 +82355,10 @@ br $break|0 end local.get $ptr - i32.load16_s + i32.load local.set $a local.get $ptr - i32.load16_s offset=2 + i32.load offset=4 local.set $b local.get $a local.get $b @@ -81262,14 +82375,14 @@ local.get $a local.get $c select - i32.store16 + i32.store local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load16_s offset=4 + i32.load offset=8 local.set $b local.get $a local.get $b @@ -81286,19 +82399,19 @@ local.get $a local.get $c select - i32.store16 offset=2 + i32.store offset=4 local.get $ptr local.get $a local.get $b local.get $c select - i32.store16 offset=4 + i32.store offset=8 end local.get $ptr - i32.load16_s + i32.load local.set $a|7 local.get $ptr - i32.load16_s offset=2 + i32.load offset=4 local.set $b|8 local.get $a|7 local.get $b|8 @@ -81315,13 +82428,13 @@ local.get $a|7 local.get $c|9 select - i32.store16 + i32.store local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store16 offset=2 + i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -81340,21 +82453,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.3 (result i32) + block $~lib/util/sort/log2u|inlined.6 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.3 + br $~lib/util/sort/log2u|inlined.6 end i32.const 2 i32.add @@ -81394,7 +82507,7 @@ end end local.get $len - i32.const 1 + i32.const 2 i32.shl call $~lib/rt/tlsf/__alloc local.set $buffer @@ -81411,7 +82524,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -81442,7 +82555,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -81466,7 +82579,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -81501,7 +82614,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -81546,7 +82659,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -81623,7 +82736,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -81641,7 +82754,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int16Array#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint32Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -81664,14 +82777,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int16Array#get:length + call $~lib/typedarray/Uint32Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -81681,7 +82794,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int16Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -81703,15 +82816,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 drop - i32.const 2 - i32.const 4 - i32.le_u + i32.const 0 drop - i32.const 14512 - br $~lib/util/sort/COMPARATOR|inlined.0 + i32.const 14704 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -81728,7 +82839,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Int16Array#sort + call $~lib/typedarray/Uint32Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -81736,7 +82847,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Int16Array,i16>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Uint32Array,u32>" (local $source i32) (local $result i32) (local $2 i32) @@ -81754,7 +82865,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Int16Array#constructor + call $~lib/typedarray/Uint32Array#constructor local.tee $source i32.store local.get $source @@ -81765,7 +82876,7 @@ local.get $2 i32.const 2 i32.const 1 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -81774,7 +82885,7 @@ local.get $2 i32.const 1 i32.const 2 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -81783,7 +82894,7 @@ local.get $2 i32.const 0 i32.const 3 - call $~lib/typedarray/Int16Array#__set + call $~lib/typedarray/Uint32Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -81794,7 +82905,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int16Array#sort@varargs + call $~lib/typedarray/Uint32Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -81804,7 +82915,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 1 i32.eq i32.eqz @@ -81823,7 +82934,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 2 i32.eq i32.eqz @@ -81842,7 +82953,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 3 i32.eq i32.eqz @@ -81860,13 +82971,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14544 + i32.const 14736 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Int16Array#sort + call $~lib/typedarray/Uint32Array#sort drop local.get $result local.set $2 @@ -81875,7 +82986,7 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 3 i32.eq i32.eqz @@ -81894,7 +83005,7 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 2 i32.eq i32.eqz @@ -81913,7 +83024,7 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int16Array#__get + call $~lib/typedarray/Uint32Array#__get i32.const 1 i32.eq i32.eqz @@ -81930,13 +83041,13 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) - (local $a i32) - (local $b i32) + (local $a i64) + (local $b i64) (local $c i32) - (local $a|7 i32) - (local $b|8 i32) + (local $a|7 i64) + (local $b|8 i64) (local $c|9 i32) (local $n i32) (local $lgPlus2 i32) @@ -82005,10 +83116,10 @@ br $break|0 end local.get $ptr - i32.load16_u + i64.load local.set $a local.get $ptr - i32.load16_u offset=2 + i64.load offset=8 local.set $b local.get $a local.get $b @@ -82016,7 +83127,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c @@ -82025,14 +83136,14 @@ local.get $a local.get $c select - i32.store16 + i64.store local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load16_u offset=4 + i64.load offset=16 local.set $b local.get $a local.get $b @@ -82040,7 +83151,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c @@ -82049,19 +83160,19 @@ local.get $a local.get $c select - i32.store16 offset=2 + i64.store offset=8 local.get $ptr local.get $a local.get $b local.get $c select - i32.store16 offset=4 + i64.store offset=16 end local.get $ptr - i32.load16_u + i64.load local.set $a|7 local.get $ptr - i32.load16_u offset=2 + i64.load offset=8 local.set $b|8 local.get $a|7 local.get $b|8 @@ -82069,7 +83180,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c|9 @@ -82078,13 +83189,13 @@ local.get $a|7 local.get $c|9 select - i32.store16 + i64.store local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store16 offset=2 + i64.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -82103,21 +83214,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.4 (result i32) + block $~lib/util/sort/log2u|inlined.7 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.4 + br $~lib/util/sort/log2u|inlined.7 end i32.const 2 i32.add @@ -82157,7 +83268,7 @@ end end local.get $len - i32.const 1 + i32.const 3 i32.shl call $~lib/rt/tlsf/__alloc local.set $buffer @@ -82174,7 +83285,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -82205,7 +83316,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -82229,7 +83340,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -82264,7 +83375,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -82309,7 +83420,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -82386,7 +83497,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -82404,7 +83515,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint16Array#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Int64Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -82427,14 +83538,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint16Array#get:length + call $~lib/typedarray/Int64Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -82444,7 +83555,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint16Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Int64Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -82466,13 +83577,15 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 drop - i32.const 0 + i32.const 8 + i32.const 4 + i32.le_u drop - i32.const 14576 - br $~lib/util/sort/COMPARATOR|inlined.0 + i32.const 14768 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -82489,7 +83602,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Uint16Array#sort + call $~lib/typedarray/Int64Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -82497,7 +83610,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Uint16Array,u16>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Int64Array,i64>" (local $source i32) (local $result i32) (local $2 i32) @@ -82515,7 +83628,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Uint16Array#constructor + call $~lib/typedarray/Int64Array#constructor local.tee $source i32.store local.get $source @@ -82525,8 +83638,8 @@ i32.store offset=4 local.get $2 i32.const 2 - i32.const 1 - call $~lib/typedarray/Uint16Array#__set + i64.const 1 + call $~lib/typedarray/Int64Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -82534,8 +83647,8 @@ i32.store offset=4 local.get $2 i32.const 1 - i32.const 2 - call $~lib/typedarray/Uint16Array#__set + i64.const 2 + call $~lib/typedarray/Int64Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -82543,8 +83656,8 @@ i32.store offset=4 local.get $2 i32.const 0 - i32.const 3 - call $~lib/typedarray/Uint16Array#__set + i64.const 3 + call $~lib/typedarray/Int64Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -82555,7 +83668,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint16Array#sort@varargs + call $~lib/typedarray/Int64Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -82565,9 +83678,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint16Array#__get - i32.const 1 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 1 + i64.eq i32.eqz if i32.const 0 @@ -82584,9 +83697,9 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint16Array#__get - i32.const 2 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 2 + i64.eq i32.eqz if i32.const 0 @@ -82603,9 +83716,9 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Uint16Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 3 + i64.eq i32.eqz if i32.const 0 @@ -82621,13 +83734,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14608 + i32.const 14800 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Uint16Array#sort + call $~lib/typedarray/Int64Array#sort drop local.get $result local.set $2 @@ -82636,9 +83749,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint16Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 3 + i64.eq i32.eqz if i32.const 0 @@ -82655,9 +83768,9 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint16Array#__get - i32.const 2 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 2 + i64.eq i32.eqz if i32.const 0 @@ -82674,9 +83787,9 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Uint16Array#__get - i32.const 1 - i32.eq + call $~lib/typedarray/Int64Array#__get + i64.const 1 + i64.eq i32.eqz if i32.const 0 @@ -82691,13 +83804,13 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) - (local $a i32) - (local $b i32) + (local $a i64) + (local $b i64) (local $c i32) - (local $a|7 i32) - (local $b|8 i32) + (local $a|7 i64) + (local $b|8 i64) (local $c|9 i32) (local $n i32) (local $lgPlus2 i32) @@ -82766,10 +83879,10 @@ br $break|0 end local.get $ptr - i32.load + i64.load local.set $a local.get $ptr - i32.load offset=4 + i64.load offset=8 local.set $b local.get $a local.get $b @@ -82777,7 +83890,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c @@ -82786,14 +83899,14 @@ local.get $a local.get $c select - i32.store + i64.store local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load offset=8 + i64.load offset=16 local.set $b local.get $a local.get $b @@ -82801,7 +83914,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c @@ -82810,19 +83923,19 @@ local.get $a local.get $c select - i32.store offset=4 + i64.store offset=8 local.get $ptr local.get $a local.get $b local.get $c select - i32.store offset=8 + i64.store offset=16 end local.get $ptr - i32.load + i64.load local.set $a|7 local.get $ptr - i32.load offset=4 + i64.load offset=8 local.set $b|8 local.get $a|7 local.get $b|8 @@ -82830,7 +83943,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $8) i32.const 0 i32.gt_s local.set $c|9 @@ -82839,13 +83952,13 @@ local.get $a|7 local.get $c|9 select - i32.store + i64.store local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store offset=4 + i64.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -82864,21 +83977,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.5 (result i32) + block $~lib/util/sort/log2u|inlined.8 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.5 + br $~lib/util/sort/log2u|inlined.8 end i32.const 2 i32.add @@ -82918,7 +84031,7 @@ end end local.get $len - i32.const 2 + i32.const 3 i32.shl call $~lib/rt/tlsf/__alloc local.set $buffer @@ -82935,7 +84048,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -82966,7 +84079,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -82990,7 +84103,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -83025,7 +84138,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -83070,7 +84183,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -83147,7 +84260,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -83165,7 +84278,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Int32Array#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint64Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -83188,14 +84301,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Int32Array#get:length + call $~lib/typedarray/Uint64Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -83205,7 +84318,7 @@ local.get $2 return ) - (func $~lib/typedarray/Int32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Uint64Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -83227,15 +84340,13 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) i32.const 1 drop - i32.const 4 - i32.const 4 - i32.le_u + i32.const 0 drop - i32.const 14640 - br $~lib/util/sort/COMPARATOR|inlined.0 + i32.const 14832 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -83252,7 +84363,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Int32Array#sort + call $~lib/typedarray/Uint64Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -83260,7 +84371,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Int32Array,i32>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Uint64Array,u64>" (local $source i32) (local $result i32) (local $2 i32) @@ -83278,7 +84389,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Int32Array#constructor + call $~lib/typedarray/Uint64Array#constructor local.tee $source i32.store local.get $source @@ -83288,8 +84399,8 @@ i32.store offset=4 local.get $2 i32.const 2 - i32.const 1 - call $~lib/typedarray/Int32Array#__set + i64.const 1 + call $~lib/typedarray/Uint64Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -83297,8 +84408,8 @@ i32.store offset=4 local.get $2 i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#__set + i64.const 2 + call $~lib/typedarray/Uint64Array#__set local.get $source local.set $2 global.get $~lib/memory/__stack_pointer @@ -83306,8 +84417,8 @@ i32.store offset=4 local.get $2 i32.const 0 - i32.const 3 - call $~lib/typedarray/Int32Array#__set + i64.const 3 + call $~lib/typedarray/Uint64Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -83318,7 +84429,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#sort@varargs + call $~lib/typedarray/Uint64Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -83328,9 +84439,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int32Array#__get - i32.const 1 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 1 + i64.eq i32.eqz if i32.const 0 @@ -83347,9 +84458,9 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int32Array#__get - i32.const 2 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 2 + i64.eq i32.eqz if i32.const 0 @@ -83366,9 +84477,9 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int32Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 3 + i64.eq i32.eqz if i32.const 0 @@ -83384,13 +84495,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14672 + i32.const 14864 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Int32Array#sort + call $~lib/typedarray/Uint64Array#sort drop local.get $result local.set $2 @@ -83399,9 +84510,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Int32Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 3 + i64.eq i32.eqz if i32.const 0 @@ -83418,9 +84529,9 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Int32Array#__get - i32.const 2 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 2 + i64.eq i32.eqz if i32.const 0 @@ -83437,9 +84548,9 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Int32Array#__get - i32.const 1 - i32.eq + call $~lib/typedarray/Uint64Array#__get + i64.const 1 + i64.eq i32.eqz if i32.const 0 @@ -83454,13 +84565,13 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) + (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) (local $3 i32) - (local $a i32) - (local $b i32) + (local $a f32) + (local $b f32) (local $c i32) - (local $a|7 i32) - (local $b|8 i32) + (local $a|7 f32) + (local $b|8 f32) (local $c|9 i32) (local $n i32) (local $lgPlus2 i32) @@ -83529,10 +84640,10 @@ br $break|0 end local.get $ptr - i32.load + f32.load local.set $a local.get $ptr - i32.load offset=4 + f32.load offset=4 local.set $b local.get $a local.get $b @@ -83540,7 +84651,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $13) i32.const 0 i32.gt_s local.set $c @@ -83549,14 +84660,14 @@ local.get $a local.get $c select - i32.store + f32.store local.get $a local.get $b local.get $c select local.set $a local.get $ptr - i32.load offset=8 + f32.load offset=8 local.set $b local.get $a local.get $b @@ -83564,7 +84675,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $13) i32.const 0 i32.gt_s local.set $c @@ -83573,19 +84684,19 @@ local.get $a local.get $c select - i32.store offset=4 + f32.store offset=4 local.get $ptr local.get $a local.get $b local.get $c select - i32.store offset=8 + f32.store offset=8 end local.get $ptr - i32.load + f32.load local.set $a|7 local.get $ptr - i32.load offset=4 + f32.load offset=4 local.set $b|8 local.get $a|7 local.get $b|8 @@ -83593,7 +84704,7 @@ global.set $~argumentsLength local.get $comparator i32.load - call_indirect (type $0) + call_indirect (type $13) i32.const 0 i32.gt_s local.set $c|9 @@ -83602,13 +84713,13 @@ local.get $a|7 local.get $c|9 select - i32.store + f32.store local.get $ptr local.get $a|7 local.get $b|8 local.get $c|9 select - i32.store offset=4 + f32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add @@ -83627,21 +84738,21 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer return end - block $~lib/util/sort/log2u|inlined.6 (result i32) + block $~lib/util/sort/log2u|inlined.9 (result i32) local.get $len local.set $n i32.const 31 local.get $n i32.clz i32.sub - br $~lib/util/sort/log2u|inlined.6 + br $~lib/util/sort/log2u|inlined.9 end i32.const 2 i32.add @@ -83698,7 +84809,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endA local.get $endA i32.const 1 @@ -83729,7 +84840,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.set $top @@ -83753,7 +84864,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/extendRunRight + call $~lib/util/sort/extendRunRight local.set $endB local.get $endB local.get $startB @@ -83788,7 +84899,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/insertionSort + call $~lib/util/sort/insertionSort end i32.const 0 local.get $hi @@ -83833,7 +84944,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns local.get $start local.set $startA local.get $leftRunStartBuf @@ -83910,7 +85021,7 @@ local.get $34 i32.store local.get $34 - call $~lib/util/sort/mergeRuns + call $~lib/util/sort/mergeRuns end local.get $i|32 i32.const 1 @@ -83928,7 +85039,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/typedarray/Uint32Array#sort (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Float32Array#sort (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -83951,14 +85062,14 @@ local.get $2 i32.store offset=4 local.get $2 - call $~lib/typedarray/Uint32Array#get:length + call $~lib/typedarray/Float32Array#get:length local.get $comparator local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/util/sort/SORT + call $~lib/util/sort/SORT local.get $this local.set $2 global.get $~lib/memory/__stack_pointer @@ -83968,7 +85079,7 @@ local.get $2 return ) - (func $~lib/typedarray/Uint32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) + (func $~lib/typedarray/Float32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 12 @@ -83990,13 +85101,17 @@ unreachable end global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) + i32.const 0 + drop i32.const 1 drop - i32.const 0 + i32.const 4 + i32.const 4 + i32.eq drop - i32.const 14704 - br $~lib/util/sort/COMPARATOR|inlined.0 + i32.const 14896 + br $~lib/util/sort/COMPARATOR|inlined.0 end local.tee $comparator i32.store @@ -84013,7 +85128,7 @@ local.get $2 i32.store offset=8 local.get $2 - call $~lib/typedarray/Uint32Array#sort + call $~lib/typedarray/Float32Array#sort local.set $2 global.get $~lib/memory/__stack_pointer i32.const 12 @@ -84021,7 +85136,7 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Uint32Array,u32>" + (func $"std/typedarray/testArraySort<~lib/typedarray/Float32Array,f32>" (local $source i32) (local $result i32) (local $2 i32) @@ -84039,7 +85154,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Uint32Array#constructor + call $~lib/typedarray/Float32Array#constructor local.tee $source i32.store local.get $source @@ -84049,26 +85164,220 @@ i32.store offset=4 local.get $2 i32.const 2 + f32.const 1 + call $~lib/typedarray/Float32Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 1 - call $~lib/typedarray/Uint32Array#__set + f32.const 2 + call $~lib/typedarray/Float32Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + f32.const 3 + call $~lib/typedarray/Float32Array#__set + global.get $~lib/memory/__stack_pointer local.get $source local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=4 local.get $2 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Float32Array#sort@varargs + local.tee $result + i32.store offset=8 + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/typedarray/Float32Array#__get + f32.const 1 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 885 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 1 + call $~lib/typedarray/Float32Array#__get + f32.const 2 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 886 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 i32.const 2 - call $~lib/typedarray/Uint32Array#__set - local.get $source + call $~lib/typedarray/Float32Array#__get + f32.const 3 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 887 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 14928 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=12 + local.get $2 + call $~lib/typedarray/Float32Array#sort + drop + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + call $~lib/typedarray/Float32Array#__get + f32.const 3 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 889 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + call $~lib/typedarray/Float32Array#__get + f32.const 2 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 890 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=4 local.get $2 + i32.const 2 + call $~lib/typedarray/Float32Array#__get + f32.const 1 + f32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $"std/typedarray/testArraySort<~lib/typedarray/Float64Array,f64>" + (local $source i32) + (local $result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 3 - call $~lib/typedarray/Uint32Array#__set + call $~lib/typedarray/Float64Array#constructor + local.tee $source + i32.store + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + f64.const 1 + call $~lib/typedarray/Float64Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 1 + f64.const 2 + call $~lib/typedarray/Float64Array#__set + local.get $source + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 0 + f64.const 3 + call $~lib/typedarray/Float64Array#__set global.get $~lib/memory/__stack_pointer local.get $source local.set $2 @@ -84079,7 +85388,7 @@ i32.const 0 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint32Array#sort@varargs + call $~lib/typedarray/Float64Array#sort@varargs local.tee $result i32.store offset=8 local.get $result @@ -84089,9 +85398,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint32Array#__get - i32.const 1 - i32.eq + call $~lib/typedarray/Float64Array#__get + f64.const 1 + f64.eq i32.eqz if i32.const 0 @@ -84108,9 +85417,9 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint32Array#__get - i32.const 2 - i32.eq + call $~lib/typedarray/Float64Array#__get + f64.const 2 + f64.eq i32.eqz if i32.const 0 @@ -84127,9 +85436,9 @@ i32.store offset=4 local.get $2 i32.const 2 - call $~lib/typedarray/Uint32Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Float64Array#__get + f64.const 3 + f64.eq i32.eqz if i32.const 0 @@ -84145,13 +85454,13 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 14736 + i32.const 14960 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Uint32Array#sort + call $~lib/typedarray/Float64Array#sort drop local.get $result local.set $2 @@ -84160,9 +85469,9 @@ i32.store offset=4 local.get $2 i32.const 0 - call $~lib/typedarray/Uint32Array#__get - i32.const 3 - i32.eq + call $~lib/typedarray/Float64Array#__get + f64.const 3 + f64.eq i32.eqz if i32.const 0 @@ -84179,2672 +85488,1892 @@ i32.store offset=4 local.get $2 i32.const 1 - call $~lib/typedarray/Uint32Array#__get + call $~lib/typedarray/Float64Array#__get + f64.const 2 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 890 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $result + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + i32.const 2 + call $~lib/typedarray/Float64Array#__get + f64.const 1 + f64.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 891 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $start:std/typedarray + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) + (local $23 i32) + (local $24 i32) + (local $25 i32) + (local $26 i32) + (local $27 i32) + (local $28 i32) + (local $29 i32) + (local $30 i32) + (local $31 i32) + (local $32 i32) + (local $33 i32) + (local $34 i32) + (local $35 i32) + (local $36 i32) + (local $37 i32) + (local $38 i32) + (local $39 i32) + (local $40 i32) + (local $41 i32) + (local $42 i32) + (local $43 i32) + (local $44 i32) + (local $45 i32) + (local $46 i32) + (local $47 i32) + (local $48 i32) + (local $49 i32) + (local $50 i32) + (local $51 i32) + (local $52 i32) + (local $53 i32) + (local $54 i32) + (local $55 i32) + (local $56 i32) + (local $57 i32) + (local $58 i32) + (local $59 i32) + (local $60 i32) + (local $61 i32) + (local $62 i32) + (local $63 i32) + (local $64 i32) + global.get $~lib/memory/__stack_pointer + i32.const 124 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 124 + memory.fill + global.get $~lib/typedarray/Int8Array.BYTES_PER_ELEMENT + i32.const 1 + i32.eq + drop + global.get $~lib/typedarray/Uint8Array.BYTES_PER_ELEMENT + i32.const 1 + i32.eq + drop + global.get $~lib/typedarray/Uint8ClampedArray.BYTES_PER_ELEMENT + i32.const 1 + i32.eq + drop + global.get $~lib/typedarray/Int16Array.BYTES_PER_ELEMENT + i32.const 2 + i32.eq + drop + global.get $~lib/typedarray/Uint16Array.BYTES_PER_ELEMENT + i32.const 2 + i32.eq + drop + global.get $~lib/typedarray/Int32Array.BYTES_PER_ELEMENT + i32.const 4 + i32.eq + drop + global.get $~lib/typedarray/Uint32Array.BYTES_PER_ELEMENT + i32.const 4 + i32.eq + drop + global.get $~lib/typedarray/Int64Array.BYTES_PER_ELEMENT + i32.const 8 + i32.eq + drop + global.get $~lib/typedarray/Uint64Array.BYTES_PER_ELEMENT + i32.const 8 + i32.eq + drop + global.get $~lib/typedarray/Float32Array.BYTES_PER_ELEMENT + i32.const 4 + i32.eq + drop + global.get $~lib/typedarray/Float64Array.BYTES_PER_ELEMENT + i32.const 8 + i32.eq + drop + memory.size + i32.const 16 + i32.shl + global.get $~lib/memory/__heap_base + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 256 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 288 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 432 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 0 + call $std/typedarray/testInstantiate + i32.const 5 + call $std/typedarray/testInstantiate + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Int32Array#constructor + local.tee $0 + i32.store + local.get $0 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Int32Array#__set + local.get $0 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int32Array#__set + local.get $0 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 2 + i32.const 3 + call $~lib/typedarray/Int32Array#__set + local.get $0 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/typedarray/Int32Array#get:length + i32.const 3 i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 890 + i32.const 95 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Uint32Array#__get - i32.const 1 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 0 i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 891 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) - (local $3 i32) - (local $a i64) - (local $b i64) - (local $c i32) - (local $a|7 i64) - (local $b|8 i64) - (local $c|9 i32) - (local $n i32) - (local $lgPlus2 i32) - (local $lgPlus2Size i32) - (local $leftRunStartBuf i32) - (local $leftRunEndBuf i32) - (local $i i32) - (local $buffer i32) - (local $hi i32) - (local $endA i32) - (local $lenA i32) - (local $20 i32) - (local $21 i32) - (local $top i32) - (local $startA i32) - (local $startB i32) - (local $endB i32) - (local $lenB i32) - (local $27 i32) - (local $28 i32) - (local $k i32) - (local $i|30 i32) - (local $start i32) - (local $i|32 i32) - (local $start|33 i32) - (local $34 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $len - i32.const 48 - i32.le_s - if - local.get $len - i32.const 1 - i32.le_s - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - i32.const 0 - i32.const 1 - i32.lt_s - drop - block $break|0 - block $case1|0 - block $case0|0 - local.get $len - local.set $3 - local.get $3 - i32.const 3 - i32.eq - br_if $case0|0 - local.get $3 - i32.const 2 - i32.eq - br_if $case1|0 - br $break|0 - end - local.get $ptr - i64.load - local.set $a - local.get $ptr - i64.load offset=8 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - i64.store - local.get $a - local.get $b - local.get $c - select - local.set $a - local.get $ptr - i64.load offset=16 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - i64.store offset=8 - local.get $ptr - local.get $a - local.get $b - local.get $c - select - i64.store offset=16 - end - local.get $ptr - i64.load - local.set $a|7 - local.get $ptr - i64.load offset=8 - local.set $b|8 - local.get $a|7 - local.get $b|8 - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c|9 - local.get $ptr - local.get $b|8 - local.get $a|7 - local.get $c|9 - select - i64.store - local.get $ptr - local.get $a|7 - local.get $b|8 - local.get $c|9 - select - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - local.get $ptr - i32.const 0 - local.get $len - i32.const 1 - i32.sub - i32.const 0 - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - block $~lib/util/sort/log2u|inlined.7 (result i32) - local.get $len - local.set $n - i32.const 31 - local.get $n - i32.clz - i32.sub - br $~lib/util/sort/log2u|inlined.7 - end - i32.const 2 - i32.add - local.set $lgPlus2 - local.get $lgPlus2 - i32.const 2 - i32.shl - local.set $lgPlus2Size - local.get $lgPlus2Size - i32.const 1 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $leftRunStartBuf - local.get $leftRunStartBuf - local.get $lgPlus2Size - i32.add - local.set $leftRunEndBuf - i32.const 0 - local.set $i - loop $for-loop|1 - local.get $i - local.get $lgPlus2 - i32.lt_u - if - local.get $leftRunStartBuf - local.get $i - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|1 - end - end - local.get $len - i32.const 3 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $buffer - local.get $len - i32.const 1 - i32.sub - local.set $hi - local.get $ptr - i32.const 0 - local.get $hi - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endA - local.get $endA - i32.const 1 - i32.add - local.set $lenA - local.get $lenA - i32.const 32 - i32.lt_s - if - local.get $hi - local.tee $20 - i32.const 32 - i32.const 1 - i32.sub - local.tee $21 - local.get $20 - local.get $21 - i32.lt_s - select - local.set $endA - local.get $ptr - i32.const 0 - local.get $endA - local.get $lenA - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.set $top - i32.const 0 - local.set $startA - loop $while-continue|2 - local.get $endA - local.get $hi - i32.lt_s - if - local.get $endA - i32.const 1 - i32.add - local.set $startB - local.get $ptr - local.get $startB - local.get $hi - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endB - local.get $endB - local.get $startB - i32.sub - i32.const 1 - i32.add - local.set $lenB - local.get $lenB - i32.const 32 - i32.lt_s - if - local.get $hi - local.tee $27 - local.get $startB - i32.const 32 - i32.add - i32.const 1 - i32.sub - local.tee $28 - local.get $27 - local.get $28 - i32.lt_s - select - local.set $endB - local.get $ptr - local.get $startB - local.get $endB - local.get $lenB - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.get $hi - local.get $startA - local.get $startB - local.get $endB - call $~lib/util/sort/nodePower - local.set $k - local.get $top - local.set $i|30 - loop $for-loop|3 - local.get $i|30 - local.get $k - i32.gt_u - if - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start - local.get $start - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start - local.get $leftRunEndBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $endA - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - local.get $start - local.set $startA - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - end - local.get $i|30 - i32.const 1 - i32.sub - local.set $i|30 - br $for-loop|3 - end - end - local.get $leftRunStartBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $startA - i32.store - local.get $leftRunEndBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $endA - i32.store - local.get $startB - local.set $startA - local.get $endB - local.set $endA - local.get $k - local.set $top - br $while-continue|2 - end - end - local.get $top - local.set $i|32 - loop $for-loop|4 - local.get $i|32 - i32.const 0 - i32.ne - if - local.get $leftRunStartBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start|33 - local.get $start|33 - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start|33 - local.get $leftRunEndBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $hi - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - end - local.get $i|32 - i32.const 1 - i32.sub - local.set $i|32 - br $for-loop|4 - end - end - local.get $buffer - call $~lib/rt/tlsf/__free - local.get $leftRunStartBuf - call $~lib/rt/tlsf/__free - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Int64Array#sort (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.const 4 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 97 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + call $~lib/typedarray/Int32Array#__get + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 98 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 + local.get $64 + i32.const 1 + call $~lib/typedarray/Int32Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 99 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/typedarray/Int64Array#get:length - local.get $comparator - local.set $2 + local.get $64 + i32.const 2 + call $~lib/typedarray/Int32Array#__get + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 100 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/sort/SORT - local.get $this - local.set $2 + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $~lib/typedarray/Int64Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int32Array#subarray + local.tee $0 + i32.store + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/typedarray/Int32Array#get:length + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 103 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 1 + i32.const 4 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 104 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) - i32.const 1 - drop - i32.const 8 - i32.const 4 - i32.le_u - drop - i32.const 14768 - br $~lib/util/sort/COMPARATOR|inlined.0 - end - local.tee $comparator - i32.store + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 1 + i32.const 4 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 105 + i32.const 3 + call $~lib/builtins/abort + unreachable end - local.get $this - local.set $2 + local.get $0 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - local.get $comparator - local.set $2 + local.get $64 + i32.const 0 + call $~lib/typedarray/Int32Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $2 + i32.const 0 + i32.const 8 + call $~lib/typedarray/Float64Array#constructor + local.tee $1 i32.store offset=8 - local.get $2 - call $~lib/typedarray/Int64Array#sort - local.set $2 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Int64Array,i64>" - (local $source i32) - (local $result i32) - (local $2 i32) + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + f64.const 1 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + f64.const 2 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 2 + f64.const 7 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 0 + local.get $64 + i32.store offset=4 + local.get $64 i32.const 3 - call $~lib/typedarray/Int64Array#constructor - local.tee $source - i32.store - local.get $source - local.set $2 + f64.const 6 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - i64.const 1 - call $~lib/typedarray/Int64Array#__set - local.get $source - local.set $2 + local.get $64 + i32.const 4 + f64.const 5 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 1 - i64.const 2 - call $~lib/typedarray/Int64Array#__set - local.get $source - local.set $2 + local.get $64 + i32.const 5 + f64.const 4 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - i64.const 3 - call $~lib/typedarray/Int64Array#__set + local.get $64 + i32.const 6 + f64.const 3 + call $~lib/typedarray/Float64Array#__set + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $source - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 7 + f64.const 8 + call $~lib/typedarray/Float64Array#__set global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int64Array#sort@varargs - local.tee $result + local.get $64 + i32.const 2 + i32.const 6 + call $~lib/typedarray/Float64Array#subarray + local.tee $1 i32.store offset=8 - local.get $result - local.set $2 + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Int64Array#__get - i64.const 1 - i64.eq + local.get $64 + call $~lib/typedarray/Float64Array#get:length + i32.const 4 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 885 + i32.const 122 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Int64Array#__get - i64.const 2 - i64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 2 + i32.const 8 + i32.mul + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 886 + i32.const 123 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Int64Array#__get - i64.const 3 - i64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 4 + i32.const 8 + i32.mul + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 887 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 14800 - local.set $2 + local.get $64 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Float64Array#sort@varargs + drop + local.get $1 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + call $~lib/typedarray/Float64Array#__get + f64.const 4 + f64.eq + if (result i32) + local.get $1 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + call $~lib/typedarray/Float64Array#__get + f64.const 5 + f64.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 2 + call $~lib/typedarray/Float64Array#__get + f64.const 6 + f64.eq + else + i32.const 0 + end + if (result i32) + local.get $1 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 3 + call $~lib/typedarray/Float64Array#__get + f64.const 7 + f64.eq + else + i32.const 0 + end + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 126 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Uint8ClampedArray#constructor + local.tee $2 i32.store offset=12 local.get $2 - call $~lib/typedarray/Int64Array#sort - drop - local.get $result - local.set $2 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + i32.const -32 + call $~lib/typedarray/Uint8ClampedArray#__set + local.get $2 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Uint8ClampedArray#__set local.get $2 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 + local.get $64 + i32.const 2 + i32.const 256 + call $~lib/typedarray/Uint8ClampedArray#__set local.get $2 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - call $~lib/typedarray/Int64Array#__get - i64.const 3 - i64.eq + call $~lib/typedarray/Uint8ClampedArray#__get + i32.const 0 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 889 + i32.const 135 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer local.get $2 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 1 - call $~lib/typedarray/Int64Array#__get - i64.const 2 - i64.eq + call $~lib/typedarray/Uint8ClampedArray#__get + i32.const 2 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 890 + i32.const 136 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer local.get $2 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 2 - call $~lib/typedarray/Int64Array#__get - i64.const 1 - i64.eq + call $~lib/typedarray/Uint8ClampedArray#__get + i32.const 255 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 891 + i32.const 137 i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) - (local $3 i32) - (local $a i64) - (local $b i64) - (local $c i32) - (local $a|7 i64) - (local $b|8 i64) - (local $c|9 i32) - (local $n i32) - (local $lgPlus2 i32) - (local $lgPlus2Size i32) - (local $leftRunStartBuf i32) - (local $leftRunEndBuf i32) - (local $i i32) - (local $buffer i32) - (local $hi i32) - (local $endA i32) - (local $lenA i32) - (local $20 i32) - (local $21 i32) - (local $top i32) - (local $startA i32) - (local $startB i32) - (local $endB i32) - (local $lenB i32) - (local $27 i32) - (local $28 i32) - (local $k i32) - (local $i|30 i32) - (local $start i32) - (local $i|32 i32) - (local $start|33 i32) - (local $34 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $len - i32.const 48 - i32.le_s - if - local.get $len - i32.const 1 - i32.le_s - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - i32.const 0 - i32.const 1 - i32.lt_s - drop - block $break|0 - block $case1|0 - block $case0|0 - local.get $len - local.set $3 - local.get $3 - i32.const 3 - i32.eq - br_if $case0|0 - local.get $3 - i32.const 2 - i32.eq - br_if $case1|0 - br $break|0 - end - local.get $ptr - i64.load - local.set $a - local.get $ptr - i64.load offset=8 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - i64.store - local.get $a - local.get $b - local.get $c - select - local.set $a - local.get $ptr - i64.load offset=16 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - i64.store offset=8 - local.get $ptr - local.get $a - local.get $b - local.get $c - select - i64.store offset=16 - end - local.get $ptr - i64.load - local.set $a|7 - local.get $ptr - i64.load offset=8 - local.set $b|8 - local.get $a|7 - local.get $b|8 - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $8) - i32.const 0 - i32.gt_s - local.set $c|9 - local.get $ptr - local.get $b|8 - local.get $a|7 - local.get $c|9 - select - i64.store - local.get $ptr - local.get $a|7 - local.get $b|8 - local.get $c|9 - select - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - local.get $ptr - i32.const 0 - local.get $len - i32.const 1 - i32.sub - i32.const 0 - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - block $~lib/util/sort/log2u|inlined.8 (result i32) - local.get $len - local.set $n - i32.const 31 - local.get $n - i32.clz - i32.sub - br $~lib/util/sort/log2u|inlined.8 - end - i32.const 2 - i32.add - local.set $lgPlus2 - local.get $lgPlus2 - i32.const 2 - i32.shl - local.set $lgPlus2Size - local.get $lgPlus2Size - i32.const 1 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $leftRunStartBuf - local.get $leftRunStartBuf - local.get $lgPlus2Size - i32.add - local.set $leftRunEndBuf - i32.const 0 - local.set $i - loop $for-loop|1 - local.get $i - local.get $lgPlus2 - i32.lt_u - if - local.get $leftRunStartBuf - local.get $i - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|1 - end - end - local.get $len - i32.const 3 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $buffer - local.get $len - i32.const 1 - i32.sub - local.set $hi - local.get $ptr - i32.const 0 - local.get $hi - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endA - local.get $endA - i32.const 1 - i32.add - local.set $lenA - local.get $lenA - i32.const 32 - i32.lt_s - if - local.get $hi - local.tee $20 - i32.const 32 - i32.const 1 - i32.sub - local.tee $21 - local.get $20 - local.get $21 - i32.lt_s - select - local.set $endA - local.get $ptr - i32.const 0 - local.get $endA - local.get $lenA - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.set $top - i32.const 0 - local.set $startA - loop $while-continue|2 - local.get $endA - local.get $hi - i32.lt_s - if - local.get $endA - i32.const 1 - i32.add - local.set $startB - local.get $ptr - local.get $startB - local.get $hi - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endB - local.get $endB - local.get $startB - i32.sub - i32.const 1 - i32.add - local.set $lenB - local.get $lenB - i32.const 32 - i32.lt_s - if - local.get $hi - local.tee $27 - local.get $startB - i32.const 32 - i32.add - i32.const 1 - i32.sub - local.tee $28 - local.get $27 - local.get $28 - i32.lt_s - select - local.set $endB - local.get $ptr - local.get $startB - local.get $endB - local.get $lenB - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.get $hi - local.get $startA - local.get $startB - local.get $endB - call $~lib/util/sort/nodePower - local.set $k - local.get $top - local.set $i|30 - loop $for-loop|3 - local.get $i|30 - local.get $k - i32.gt_u - if - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start - local.get $start - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start - local.get $leftRunEndBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $endA - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - local.get $start - local.set $startA - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - end - local.get $i|30 - i32.const 1 - i32.sub - local.set $i|30 - br $for-loop|3 - end - end - local.get $leftRunStartBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $startA - i32.store - local.get $leftRunEndBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $endA - i32.store - local.get $startB - local.set $startA - local.get $endB - local.set $endA - local.get $k - local.set $top - br $while-continue|2 - end - end - local.get $top - local.set $i|32 - loop $for-loop|4 - local.get $i|32 - i32.const 0 - i32.ne - if - local.get $leftRunStartBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start|33 - local.get $start|33 - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start|33 - local.get $leftRunEndBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $hi - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - end - local.get $i|32 - i32.const 1 - i32.sub - local.set $i|32 - br $for-loop|4 - end - end - local.get $buffer - call $~lib/rt/tlsf/__free - local.get $leftRunStartBuf - call $~lib/rt/tlsf/__free + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Uint64Array#sort (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) + i32.const 0 + i32.const 5 + call $~lib/typedarray/Int8Array#constructor + local.tee $3 + i32.store offset=16 + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Int8Array#__set + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int8Array#__set + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 + local.get $64 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Int8Array#__set + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/typedarray/Uint64Array#get:length - local.get $comparator - local.set $2 + local.get $64 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Int8Array#__set + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/sort/SORT - local.get $this - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 4 + i32.const 5 + call $~lib/typedarray/Int8Array#__set + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $~lib/typedarray/Uint64Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 1 + i32.const 3 + call $~lib/typedarray/Int8Array#fill + drop + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 0 + i32.const 16 + i32.const 704 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 149 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) - i32.const 1 - drop - i32.const 0 - drop - i32.const 14832 - br $~lib/util/sort/COMPARATOR|inlined.0 - end - local.tee $comparator - i32.store - end - local.get $this - local.set $2 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int8Array#fill@varargs + drop + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - local.get $comparator - local.set $2 + local.get $64 + i32.const 5 + i32.const 0 + i32.const 16 + i32.const 784 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - local.get $2 - call $~lib/typedarray/Uint64Array#sort - local.set $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 152 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Uint64Array,u64>" - (local $source i32) - (local $result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 0 + i32.const -3 + call $~lib/typedarray/Int8Array#fill + drop + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 0 i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + i32.const 816 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 155 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 2 + i32.const -2 + i32.const 2 + global.set $~argumentsLength i32.const 0 - i32.const 3 - call $~lib/typedarray/Uint64Array#constructor - local.tee $source - i32.store - local.get $source - local.set $2 + call $~lib/typedarray/Int8Array#fill@varargs + drop + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - i64.const 1 - call $~lib/typedarray/Uint64Array#__set - local.get $source - local.set $2 + local.get $64 + i32.const 5 + i32.const 0 + i32.const 16 + i32.const 848 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 158 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + i32.const 0 i32.const 1 - i64.const 2 - call $~lib/typedarray/Uint64Array#__set - local.get $source - local.set $2 + i32.const 0 + call $~lib/typedarray/Int8Array#fill + drop + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + i32.const 5 i32.const 0 - i64.const 3 - call $~lib/typedarray/Uint64Array#__set + i32.const 16 + i32.const 880 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $source - local.set $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 161 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + i32.const 1 + i32.const 4 + call $~lib/typedarray/Int8Array#subarray + local.tee $9 + i32.store offset=24 + local.get $9 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 + i32.const 0 + i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Uint64Array#sort@varargs - local.tee $result - i32.store offset=8 - local.get $result - local.set $2 + call $~lib/typedarray/Int8Array#fill@varargs + drop + local.get $9 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Uint64Array#__get - i64.const 1 - i64.eq + local.get $64 + call $~lib/typedarray/Int8Array#get:length + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 885 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $9 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 1 - call $~lib/typedarray/Uint64Array#__get - i64.const 2 - i64.eq + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 886 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $9 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Uint64Array#__get - i64.const 3 - i64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 887 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $9 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 14864 - local.set $2 + local.get $64 + i32.const 3 + i32.const 0 + i32.const 16 + i32.const 912 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=12 - local.get $2 - call $~lib/typedarray/Uint64Array#sort - drop - local.get $result - local.set $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 168 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $3 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 0 + i32.const 16 + i32.const 944 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt8ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 169 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 5 + call $~lib/typedarray/Int32Array#constructor + local.tee $12 + i32.store offset=28 + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Int32Array#__set + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 2 + call $~lib/typedarray/Int32Array#__set + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Int32Array#__set + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Int32Array#__set + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Uint64Array#__get - i64.const 3 - i64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 889 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 + local.get $64 + i32.const 4 + i32.const 5 + call $~lib/typedarray/Int32Array#__set + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 1 - call $~lib/typedarray/Uint64Array#__get - i64.const 2 - i64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 890 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 + i32.const 1 + i32.const 3 + call $~lib/typedarray/Int32Array#fill + drop + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + i32.const 5 i32.const 2 - call $~lib/typedarray/Uint64Array#__get - i64.const 1 - i64.eq + i32.const 17 + i32.const 976 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 891 + i32.const 181 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/util/sort/SORT (param $ptr i32) (param $len i32) (param $comparator i32) - (local $3 i32) - (local $a f32) - (local $b f32) - (local $c i32) - (local $a|7 f32) - (local $b|8 f32) - (local $c|9 i32) - (local $n i32) - (local $lgPlus2 i32) - (local $lgPlus2Size i32) - (local $leftRunStartBuf i32) - (local $leftRunEndBuf i32) - (local $i i32) - (local $buffer i32) - (local $hi i32) - (local $endA i32) - (local $lenA i32) - (local $20 i32) - (local $21 i32) - (local $top i32) - (local $startA i32) - (local $startB i32) - (local $endB i32) - (local $lenB i32) - (local $27 i32) - (local $28 i32) - (local $k i32) - (local $i|30 i32) - (local $start i32) - (local $i|32 i32) - (local $start|33 i32) - (local $34 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - i32.store - local.get $len - i32.const 48 - i32.le_s - if - local.get $len - i32.const 1 - i32.le_s - if - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - i32.const 0 - i32.const 1 - i32.lt_s - drop - block $break|0 - block $case1|0 - block $case0|0 - local.get $len - local.set $3 - local.get $3 - i32.const 3 - i32.eq - br_if $case0|0 - local.get $3 - i32.const 2 - i32.eq - br_if $case1|0 - br $break|0 - end - local.get $ptr - f32.load - local.set $a - local.get $ptr - f32.load offset=4 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $13) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - f32.store - local.get $a - local.get $b - local.get $c - select - local.set $a - local.get $ptr - f32.load offset=8 - local.set $b - local.get $a - local.get $b - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $13) - i32.const 0 - i32.gt_s - local.set $c - local.get $ptr - local.get $b - local.get $a - local.get $c - select - f32.store offset=4 - local.get $ptr - local.get $a - local.get $b - local.get $c - select - f32.store offset=8 - end - local.get $ptr - f32.load - local.set $a|7 - local.get $ptr - f32.load offset=4 - local.set $b|8 - local.get $a|7 - local.get $b|8 - i32.const 2 - global.set $~argumentsLength - local.get $comparator - i32.load - call_indirect (type $13) - i32.const 0 - i32.gt_s - local.set $c|9 - local.get $ptr - local.get $b|8 - local.get $a|7 - local.get $c|9 - select - f32.store - local.get $ptr - local.get $a|7 - local.get $b|8 - local.get $c|9 - select - f32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - local.get $ptr - i32.const 0 - local.get $len - i32.const 1 - i32.sub - i32.const 0 - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - return - end - block $~lib/util/sort/log2u|inlined.9 (result i32) - local.get $len - local.set $n - i32.const 31 - local.get $n - i32.clz - i32.sub - br $~lib/util/sort/log2u|inlined.9 - end - i32.const 2 - i32.add - local.set $lgPlus2 - local.get $lgPlus2 - i32.const 2 - i32.shl - local.set $lgPlus2Size - local.get $lgPlus2Size - i32.const 1 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $leftRunStartBuf - local.get $leftRunStartBuf - local.get $lgPlus2Size - i32.add - local.set $leftRunEndBuf i32.const 0 - local.set $i - loop $for-loop|1 - local.get $i - local.get $lgPlus2 - i32.lt_u - if - local.get $leftRunStartBuf - local.get $i - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - br $for-loop|1 - end - end - local.get $len - i32.const 2 - i32.shl - call $~lib/rt/tlsf/__alloc - local.set $buffer - local.get $len i32.const 1 - i32.sub - local.set $hi - local.get $ptr + global.set $~argumentsLength i32.const 0 - local.get $hi - local.get $comparator - local.set $34 + call $~lib/typedarray/Int32Array#fill@varargs + drop + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endA - local.get $endA - i32.const 1 - i32.add - local.set $lenA - local.get $lenA - i32.const 32 - i32.lt_s + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1024 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz if - local.get $hi - local.tee $20 - i32.const 32 - i32.const 1 - i32.sub - local.tee $21 - local.get $20 - local.get $21 - i32.lt_s - select - local.set $endA - local.get $ptr - i32.const 0 - local.get $endA - local.get $lenA - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.set $top - i32.const 0 - local.set $startA - loop $while-continue|2 - local.get $endA - local.get $hi - i32.lt_s - if - local.get $endA - i32.const 1 - i32.add - local.set $startB - local.get $ptr - local.get $startB - local.get $hi - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/extendRunRight - local.set $endB - local.get $endB - local.get $startB - i32.sub - i32.const 1 - i32.add - local.set $lenB - local.get $lenB - i32.const 32 - i32.lt_s - if - local.get $hi - local.tee $27 - local.get $startB - i32.const 32 - i32.add - i32.const 1 - i32.sub - local.tee $28 - local.get $27 - local.get $28 - i32.lt_s - select - local.set $endB - local.get $ptr - local.get $startB - local.get $endB - local.get $lenB - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/insertionSort - end - i32.const 0 - local.get $hi - local.get $startA - local.get $startB - local.get $endB - call $~lib/util/sort/nodePower - local.set $k - local.get $top - local.set $i|30 - loop $for-loop|3 - local.get $i|30 - local.get $k - i32.gt_u - if - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start - local.get $start - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start - local.get $leftRunEndBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $endA - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - local.get $start - local.set $startA - local.get $leftRunStartBuf - local.get $i|30 - i32.const 2 - i32.shl - i32.add - i32.const -1 - i32.store - end - local.get $i|30 - i32.const 1 - i32.sub - local.set $i|30 - br $for-loop|3 - end - end - local.get $leftRunStartBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $startA - i32.store - local.get $leftRunEndBuf - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $endA - i32.store - local.get $startB - local.set $startA - local.get $endB - local.set $endA - local.get $k - local.set $top - br $while-continue|2 - end - end - local.get $top - local.set $i|32 - loop $for-loop|4 - local.get $i|32 i32.const 0 - i32.ne - if - local.get $leftRunStartBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - local.set $start|33 - local.get $start|33 - i32.const -1 - i32.ne - if - local.get $ptr - local.get $start|33 - local.get $leftRunEndBuf - local.get $i|32 - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 1 - i32.add - local.get $hi - local.get $buffer - local.get $comparator - local.set $34 - global.get $~lib/memory/__stack_pointer - local.get $34 - i32.store - local.get $34 - call $~lib/util/sort/mergeRuns - end - local.get $i|32 - i32.const 1 - i32.sub - local.set $i|32 - br $for-loop|4 - end + i32.const 544 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable end - local.get $buffer - call $~lib/rt/tlsf/__free - local.get $leftRunStartBuf - call $~lib/rt/tlsf/__free + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/typedarray/Float32Array#sort (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 0 + i32.const -3 + call $~lib/typedarray/Int32Array#fill + drop + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1072 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - local.get $this - local.set $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 187 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/arraybuffer/ArrayBufferView#get:dataStart - local.get $this - local.set $2 + local.get $64 + i32.const 2 + i32.const -2 + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#fill@varargs + drop + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - call $~lib/typedarray/Float32Array#get:length - local.get $comparator - local.set $2 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1120 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/util/sort/SORT - local.get $this - local.set $2 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 190 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 8 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - return - ) - (func $~lib/typedarray/Float32Array#sort@varargs (param $this i32) (param $comparator i32) (result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 + i32.const 1 + i32.const 0 + call $~lib/typedarray/Int32Array#fill + drop + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1168 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $12 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 4 + call $~lib/typedarray/Int32Array#subarray + local.tee $18 + i32.store offset=32 + local.get $18 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - i32.store offset=8 - block $1of1 - block $0of1 - block $outOfRange - global.get $~argumentsLength - br_table $0of1 $1of1 $outOfRange - end - unreachable - end - global.get $~lib/memory/__stack_pointer - block $~lib/util/sort/COMPARATOR|inlined.0 (result i32) - i32.const 0 - drop - i32.const 1 - drop - i32.const 4 - i32.const 4 - i32.eq - drop - i32.const 14896 - br $~lib/util/sort/COMPARATOR|inlined.0 - end - local.tee $comparator - i32.store + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#fill@varargs + drop + local.get $18 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/typedarray/Int32Array#get:length + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 197 + i32.const 3 + call $~lib/builtins/abort + unreachable end - local.get $this - local.set $2 + local.get $18 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - local.get $comparator - local.set $2 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 1 + i32.const 4 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 198 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $18 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - local.get $2 - call $~lib/typedarray/Float32Array#sort - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.const 4 + i32.mul + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 199 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $18 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $2 - ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Float32Array,f32>" - (local $source i32) - (local $result i32) - (local $2 i32) + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 3 + i32.const 2 + i32.const 17 + i32.const 1216 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 200 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $12 + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1248 + call $~lib/rt/__newArray + local.set $64 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 201 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 3 - call $~lib/typedarray/Float32Array#constructor - local.tee $source - i32.store - local.get $source - local.set $2 + i32.const 6 + call $~lib/typedarray/Int8Array#constructor + local.tee $21 + i32.store offset=36 + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - f32.const 1 - call $~lib/typedarray/Float32Array#__set - local.get $source - local.set $2 + local.get $64 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Int8Array#__set + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 1 - f32.const 2 - call $~lib/typedarray/Float32Array#__set - local.get $source - local.set $2 + i32.const 2 + call $~lib/typedarray/Int8Array#__set + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - f32.const 3 - call $~lib/typedarray/Float32Array#__set + local.get $64 + i32.const 2 + i32.const 3 + call $~lib/typedarray/Int8Array#__set + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $source - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Int8Array#__set + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float32Array#sort@varargs - local.tee $result - i32.store offset=8 - local.get $result - local.set $2 + local.get $64 + i32.const 4 + i32.const 5 + call $~lib/typedarray/Int8Array#__set + local.get $21 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + i32.const 5 + i32.const 6 + call $~lib/typedarray/Int8Array#__set + global.get $~lib/memory/__stack_pointer + local.get $21 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 6 + call $~lib/typedarray/Int8Array#subarray + local.tee $22 + i32.store offset=40 + local.get $22 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - call $~lib/typedarray/Float32Array#__get - f32.const 1 - f32.eq + call $~lib/typedarray/Int8Array#__get + i32.const 2 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 885 + i32.const 222 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $22 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Float32Array#__get - f32.const 2 - f32.eq + local.get $64 + call $~lib/typedarray/Int8Array#get:length + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 223 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $22 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 886 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $22 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Float32Array#__get - f32.const 3 - f32.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 5 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 887 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 14928 - local.set $2 + local.get $22 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=12 - local.get $2 - call $~lib/typedarray/Float32Array#sort - drop - local.get $result - local.set $2 + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 1 + i32.const 5 + call $~lib/typedarray/Int8Array#subarray + local.tee $23 + i32.store offset=44 + local.get $23 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 0 - call $~lib/typedarray/Float32Array#__get - f32.const 3 - f32.eq + call $~lib/typedarray/Int8Array#__get + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 889 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $23 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Float32Array#__get - f32.const 2 - f32.eq + local.get $64 + call $~lib/typedarray/Int8Array#get:length + i32.const 4 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 890 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $23 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 2 - call $~lib/typedarray/Float32Array#__get - f32.const 1 - f32.eq + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 891 + i32.const 230 i32.const 3 call $~lib/builtins/abort unreachable end + local.get $23 + local.set $64 global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $"std/typedarray/testArraySort<~lib/typedarray/Float64Array,f64>" - (local $source i32) - (local $result i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Float64Array#constructor - local.tee $source - i32.store - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 2 - f64.const 1 - call $~lib/typedarray/Float64Array#__set - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 1 - f64.const 2 - call $~lib/typedarray/Float64Array#__set - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - f64.const 3 - call $~lib/typedarray/Float64Array#__set - global.get $~lib/memory/__stack_pointer - local.get $source - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 0 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Float64Array#sort@varargs - local.tee $result - i32.store offset=8 - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Float64Array#__get - f64.const 1 - f64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 4 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 885 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $23 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 i32.store offset=4 - local.get $2 + local.get $64 i32.const 1 - call $~lib/typedarray/Float64Array#__get - f64.const 2 - f64.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 886 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $result - local.set $2 + i32.const 4 + call $~lib/typedarray/Int8Array#subarray + local.tee $24 + i32.store offset=48 + local.get $24 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Float64Array#__get - f64.const 3 - f64.eq + local.get $64 + i32.const 0 + call $~lib/typedarray/Int8Array#__get + i32.const 4 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 887 + i32.const 234 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=4 - local.get $2 - i32.const 14960 - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=12 - local.get $2 - call $~lib/typedarray/Float64Array#sort - drop - local.get $result - local.set $2 + local.get $24 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 0 - call $~lib/typedarray/Float64Array#__get - f64.const 3 - f64.eq + local.get $64 + call $~lib/typedarray/Int8Array#get:length + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 889 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $24 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 1 - call $~lib/typedarray/Float64Array#__get - f64.const 2 - f64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 890 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $result - local.set $2 + local.get $24 + local.set $64 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $64 i32.store offset=4 - local.get $2 - i32.const 2 - call $~lib/typedarray/Float64Array#__get - f64.const 1 - f64.eq + local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 891 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 16 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $start:std/typedarray - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - (local $26 i32) - (local $27 i32) - (local $28 i32) - (local $29 i32) - (local $30 i32) - (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 i32) - (local $35 i32) - (local $36 i32) - (local $37 i32) - (local $38 i32) - (local $39 i32) - (local $40 i32) - (local $41 i32) - (local $42 i32) - (local $43 i32) - (local $44 i32) - (local $45 i32) - (local $46 i32) - (local $47 i32) - (local $48 i32) - (local $49 i32) - (local $50 i32) - (local $51 i32) - (local $52 i32) - (local $53 i32) - (local $54 i32) - (local $55 i32) - (local $56 i32) - (local $57 i32) - (local $58 i32) - (local $59 i32) - (local $60 i32) - (local $61 i32) - (local $62 i32) - (local $63 i32) - (local $64 i32) - global.get $~lib/memory/__stack_pointer - i32.const 124 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check + i32.const 0 + i32.const 5 + call $~lib/typedarray/Int32Array#constructor + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 0 - i32.const 124 - memory.fill - global.get $~lib/typedarray/Int8Array.BYTES_PER_ELEMENT - i32.const 1 - i32.eq - drop - global.get $~lib/typedarray/Uint8Array.BYTES_PER_ELEMENT i32.const 1 - i32.eq - drop - global.get $~lib/typedarray/Uint8ClampedArray.BYTES_PER_ELEMENT + call $~lib/typedarray/Int32Array#__set + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 1 - i32.eq - drop - global.get $~lib/typedarray/Int16Array.BYTES_PER_ELEMENT i32.const 2 - i32.eq - drop - global.get $~lib/typedarray/Uint16Array.BYTES_PER_ELEMENT + call $~lib/typedarray/Int32Array#__set + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 2 - i32.eq - drop - global.get $~lib/typedarray/Int32Array.BYTES_PER_ELEMENT - i32.const 4 - i32.eq - drop - global.get $~lib/typedarray/Uint32Array.BYTES_PER_ELEMENT + i32.const 3 + call $~lib/typedarray/Int32Array#__set + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 3 i32.const 4 - i32.eq - drop - global.get $~lib/typedarray/Int64Array.BYTES_PER_ELEMENT - i32.const 8 - i32.eq - drop - global.get $~lib/typedarray/Uint64Array.BYTES_PER_ELEMENT - i32.const 8 - i32.eq - drop - global.get $~lib/typedarray/Float32Array.BYTES_PER_ELEMENT + call $~lib/typedarray/Int32Array#__set + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 4 - i32.eq - drop - global.get $~lib/typedarray/Float64Array.BYTES_PER_ELEMENT - i32.const 8 - i32.eq - drop - memory.size - i32.const 16 - i32.shl - global.get $~lib/memory/__heap_base - i32.sub + i32.const 5 + call $~lib/typedarray/Int32Array#__set + global.get $~lib/memory/__stack_pointer + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 0 i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 256 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 288 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 432 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace + global.set $~argumentsLength i32.const 0 - call $std/typedarray/testInstantiate - i32.const 5 - call $std/typedarray/testInstantiate + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $26 + i32.store offset=56 + local.get $25 + local.set $64 global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 i32.const 0 i32.const 3 - call $~lib/typedarray/Int32Array#constructor - local.tee $0 - i32.store - local.get $0 + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1296 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 248 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -86852,533 +87381,542 @@ local.get $64 i32.const 0 i32.const 1 - call $~lib/typedarray/Int32Array#__set - local.get $0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 i32.const 1 + i32.const 3 i32.const 2 - call $~lib/typedarray/Int32Array#__set - local.get $0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 5 i32.const 2 - i32.const 3 - call $~lib/typedarray/Int32Array#__set - local.get $0 + i32.const 17 + i32.const 1344 + call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 - call $~lib/typedarray/Int32Array#get:length - i32.const 3 - i32.eq + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 95 + i32.const 250 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $0 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 96 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 + i32.const 1 + i32.const 2 + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.const 4 - i32.mul - i32.eq + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1392 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 97 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $0 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 0 - call $~lib/typedarray/Int32Array#__get i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 98 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 - i32.const 1 - call $~lib/typedarray/Int32Array#__get i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 99 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 + i32.const 2 + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 5 i32.const 2 - call $~lib/typedarray/Int32Array#__get - i32.const 3 - i32.eq + i32.const 17 + i32.const 1440 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 100 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 0 i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#subarray - local.tee $0 - i32.store - local.get $0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 + i32.const 0 + i32.const 3 + i32.const 4 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/typedarray/Int32Array#get:length - i32.const 1 - i32.eq + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1488 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 103 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $0 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 0 i32.const 1 - i32.const 4 - i32.mul - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 104 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 1 + i32.const 3 i32.const 4 - i32.mul - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 105 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - call $~lib/typedarray/Int32Array#__get + i32.const 5 i32.const 2 - i32.eq + i32.const 17 + i32.const 1536 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 106 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 8 - call $~lib/typedarray/Float64Array#constructor - local.tee $1 - i32.store offset=8 - local.get $1 + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 0 - f64.const 1 - call $~lib/typedarray/Float64Array#__set - local.get $1 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 1 - f64.const 2 - call $~lib/typedarray/Float64Array#__set - local.get $1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 + i32.const 1 i32.const 2 - f64.const 7 - call $~lib/typedarray/Float64Array#__set - local.get $1 + i32.const 4 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 3 - f64.const 6 - call $~lib/typedarray/Float64Array#__set - local.get $1 + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1584 + call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 - i32.const 4 - f64.const 5 - call $~lib/typedarray/Float64Array#__set - local.get $1 - local.set $64 + call $std/typedarray/isInt32ArrayEqual + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 260 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - f64.const 4 - call $~lib/typedarray/Float64Array#__set - local.get $1 + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 6 - f64.const 3 - call $~lib/typedarray/Float64Array#__set - local.get $1 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 - i32.const 7 - f64.const 8 - call $~lib/typedarray/Float64Array#__set - global.get $~lib/memory/__stack_pointer - local.get $1 + i32.const 0 + i32.const -2 + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 5 i32.const 2 - i32.const 6 - call $~lib/typedarray/Float64Array#subarray - local.tee $1 - i32.store offset=8 - local.get $1 + i32.const 17 + i32.const 1632 + call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 - call $~lib/typedarray/Float64Array#get:length - i32.const 4 - i32.eq + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 122 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $1 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 2 - i32.const 8 - i32.mul - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 123 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 + i32.const 0 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 + i32.const 0 + i32.const -2 + i32.const -1 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 4 - i32.const 8 - i32.mul - i32.eq + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1680 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 124 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $1 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 0 + i32.const 1 global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Float64Array#sort@varargs - drop - local.get $1 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 + i32.const -4 + i32.const -3 + i32.const -2 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - call $~lib/typedarray/Float64Array#__get - f64.const 4 - f64.eq - if (result i32) - local.get $1 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - call $~lib/typedarray/Float64Array#__get - f64.const 5 - f64.eq - else - i32.const 0 - end - if (result i32) - local.get $1 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - call $~lib/typedarray/Float64Array#__get - f64.const 6 - f64.eq - else - i32.const 0 - end - if (result i32) - local.get $1 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 3 - call $~lib/typedarray/Float64Array#__get - f64.const 7 - f64.eq - else - i32.const 0 - end + i32.const 5 + i32.const 2 + i32.const 17 + i32.const 1728 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 126 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Uint8ClampedArray#constructor - local.tee $2 - i32.store offset=12 - local.get $2 + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 0 - i32.const -32 - call $~lib/typedarray/Uint8ClampedArray#__set - local.get $2 + i32.const 1 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=60 local.get $64 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__set - local.get $2 + i32.const -4 + i32.const -3 + i32.const -1 + call $~lib/typedarray/Int32Array#copyWithin local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 5 i32.const 2 - i32.const 256 - call $~lib/typedarray/Uint8ClampedArray#__set - local.get $2 + i32.const 17 + i32.const 1776 + call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#__get - i32.const 0 - i32.eq + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 135 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $2 + global.get $~lib/memory/__stack_pointer + local.get $26 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 0 i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#__get + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $25 + i32.store offset=52 + local.get $25 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=60 + local.get $64 + i32.const -4 + i32.const -3 i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 136 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#copyWithin@varargs local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + i32.const 5 i32.const 2 - call $~lib/typedarray/Uint8ClampedArray#__get - i32.const 255 - i32.eq + i32.const 17 + i32.const 1824 + call $~lib/rt/__newArray + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + call $std/typedarray/isInt32ArrayEqual i32.eqz if i32.const 0 i32.const 544 - i32.const 137 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable @@ -87386,10 +87924,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 5 - call $~lib/typedarray/Int8Array#constructor - local.tee $3 - i32.store offset=16 - local.get $3 + call $~lib/typedarray/Int32Array#constructor + local.tee $39 + i32.store offset=64 + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -87397,8 +87935,8 @@ local.get $64 i32.const 0 i32.const 1 - call $~lib/typedarray/Int8Array#__set - local.get $3 + call $~lib/typedarray/Int32Array#__set + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -87406,8 +87944,8 @@ local.get $64 i32.const 1 i32.const 2 - call $~lib/typedarray/Int8Array#__set - local.get $3 + call $~lib/typedarray/Int32Array#__set + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -87415,8 +87953,8 @@ local.get $64 i32.const 2 i32.const 3 - call $~lib/typedarray/Int8Array#__set - local.get $3 + call $~lib/typedarray/Int32Array#__set + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -87424,8 +87962,8 @@ local.get $64 i32.const 3 i32.const 4 - call $~lib/typedarray/Int8Array#__set - local.get $3 + call $~lib/typedarray/Int32Array#__set + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -87433,709 +87971,886 @@ local.get $64 i32.const 4 i32.const 5 - call $~lib/typedarray/Int8Array#__set - local.get $3 + call $~lib/typedarray/Int32Array#__set + global.get $~lib/memory/__stack_pointer + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 1 - i32.const 1 - i32.const 3 - call $~lib/typedarray/Int8Array#fill - drop - local.get $3 + i32.const 4 + call $~lib/typedarray/Int32Array#subarray + local.tee $40 + i32.store offset=68 + local.get $40 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 0 - i32.const 16 - i32.const 704 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/typedarray/Int32Array#get:length + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 149 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $40 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int8Array#fill@varargs - drop - local.get $3 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 283 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $40 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 0 - i32.const 16 - i32.const 784 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 12 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 152 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $3 + global.get $~lib/memory/__stack_pointer + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 1 - i32.const 0 - i32.const -3 - call $~lib/typedarray/Int8Array#fill - drop - local.get $3 + i32.const 3 + call $~lib/typedarray/Int32Array#slice + local.tee $41 + i32.store offset=72 + local.get $41 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 i32.const 0 - i32.const 16 - i32.const 816 - call $~lib/rt/__newArray + call $~lib/typedarray/Int32Array#__get + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 287 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $41 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt8ArrayEqual + i32.const 1 + call $~lib/typedarray/Int32Array#__get + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 155 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $41 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + call $~lib/typedarray/Int32Array#get:length i32.const 2 - i32.const -2 - i32.const 2 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int8Array#fill@varargs - drop - local.get $3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 289 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $41 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 0 - i32.const 16 - i32.const 848 - call $~lib/rt/__newArray + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 290 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $41 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 8 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 158 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $3 + global.get $~lib/memory/__stack_pointer + local.get $40 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 i32.const 1 - i32.const 0 - call $~lib/typedarray/Int8Array#fill - drop - local.get $3 + i32.const 2 + call $~lib/typedarray/Int32Array#slice + local.tee $42 + i32.store offset=76 + local.get $42 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 i32.const 0 - i32.const 16 - i32.const 880 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/typedarray/Int32Array#__get + i32.const 3 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 161 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable end - global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $42 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + call $~lib/typedarray/Int32Array#get:length i32.const 1 - i32.const 4 - call $~lib/typedarray/Int8Array#subarray - local.tee $9 - i32.store offset=24 - local.get $9 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 295 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $42 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 0 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int8Array#fill@varargs - drop - local.get $9 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int8Array#get:length - i32.const 3 i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 165 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $9 + local.get $42 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 1 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.const 4 i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 166 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $9 + global.get $~lib/memory/__stack_pointer + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 - i32.eq + i32.const 0 + i32.const 0 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Int32Array#slice@varargs + local.tee $43 + i32.store offset=80 + local.get $43 + local.get $39 + i32.ne i32.eqz if i32.const 0 i32.const 544 - i32.const 167 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $9 + local.get $43 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 3 - i32.const 0 - i32.const 16 - i32.const 912 - call $~lib/rt/__newArray + call $~lib/typedarray/Int32Array#get:length + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/typedarray/Int32Array#get:length + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 168 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $3 + local.get $43 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 0 - i32.const 16 - i32.const 944 - call $~lib/rt/__newArray + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt8ArrayEqual + call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 169 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Int32Array#constructor - local.tee $12 - i32.store offset=28 - local.get $12 + local.get $43 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - i32.const 1 - call $~lib/typedarray/Int32Array#__set - local.get $12 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + local.get $39 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#__set - local.get $12 - local.set $64 + call $~lib/arraybuffer/ArrayBufferView#get:byteLength + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 303 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testReduce<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testReduce<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testReduce<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testReduce<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testAt<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testAt<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testAt<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testAt<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testAt<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testAt<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testAt<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testAt<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testAt<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testAt<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testAt<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>" global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - i32.const 3 - call $~lib/typedarray/Int32Array#__set - local.get $12 + i32.const 0 + i32.const 1 + call $~lib/typedarray/Float64Array#constructor + local.tee $47 + i32.store offset=84 + local.get $47 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 3 - i32.const 4 - call $~lib/typedarray/Int32Array#__set - local.get $12 + i32.const 0 + f64.const nan:0x8000000000000 + call $~lib/typedarray/Float64Array#__set + local.get $47 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 4 - i32.const 5 - call $~lib/typedarray/Int32Array#__set - local.get $12 + f64.const nan:0x8000000000000 + i32.const 0 + call $~lib/typedarray/Float64Array#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 653 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $47 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + f64.const nan:0x8000000000000 + i32.const 0 + call $~lib/typedarray/Float64Array#includes + i32.const 0 + i32.ne i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 654 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 i32.const 1 - i32.const 3 - call $~lib/typedarray/Int32Array#fill - drop - local.get $12 + call $~lib/typedarray/Float32Array#constructor + local.tee $48 + i32.store offset=88 + local.get $48 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 976 - call $~lib/rt/__newArray + i32.const 0 + f32.const nan:0x400000 + call $~lib/typedarray/Float32Array#__set + local.get $48 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt32ArrayEqual + f32.const nan:0x400000 + i32.const 0 + call $~lib/typedarray/Float32Array#indexOf + i32.const -1 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 181 + i32.const 659 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $12 + local.get $48 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 + f32.const nan:0x400000 i32.const 0 + call $~lib/typedarray/Float32Array#includes i32.const 0 + i32.ne i32.const 1 - global.set $~argumentsLength + i32.eq + i32.eqz + if + i32.const 0 + i32.const 544 + i32.const 660 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>" + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/typedarray/Int32Array#fill@varargs - drop - local.get $12 + i32.const 0 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $50 + i32.store offset=92 + global.get $~lib/memory/__stack_pointer + local.get $50 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 + i32.const 0 i32.const 2 - i32.const 17 - i32.const 1024 - call $~lib/rt/__newArray + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8Array.wrap@varargs + local.tee $51 + i32.store offset=96 + local.get $51 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt32ArrayEqual + call $~lib/typedarray/Uint8Array#get:length + i32.const 0 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 184 + i32.const 737 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $12 - local.set $64 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 i32.const 0 - i32.const -3 - call $~lib/typedarray/Int32Array#fill - drop - local.get $12 + i32.const 2 + call $~lib/arraybuffer/ArrayBuffer#constructor + local.tee $50 + i32.store offset=92 + global.get $~lib/memory/__stack_pointer + local.get $50 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 i32.const 2 - i32.const 17 - i32.const 1072 - call $~lib/rt/__newArray + i32.const 2 + global.set $~argumentsLength + i32.const 0 + call $~lib/typedarray/Uint8Array.wrap@varargs + local.tee $51 + i32.store offset=96 + local.get $51 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt32ArrayEqual + call $~lib/typedarray/Uint8Array#get:length + i32.const 0 + i32.eq i32.eqz if i32.const 0 i32.const 544 - i32.const 187 + i32.const 741 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $12 + call $"std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>" + call $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array> + call $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array> + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 10 + call $~lib/typedarray/Uint8ClampedArray#constructor + local.tee $56 + i32.store offset=100 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 3 + call $~lib/typedarray/Float32Array#constructor + local.tee $57 + i32.store offset=104 + local.get $57 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 2 - i32.const -2 - i32.const 2 - global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#fill@varargs - drop - local.get $12 + f32.const 400 + call $~lib/typedarray/Float32Array#__set + local.get $57 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1120 - call $~lib/rt/__newArray + i32.const 1 + f32.const nan:0x400000 + call $~lib/typedarray/Float32Array#__set + local.get $57 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 190 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $12 + i32.const 2 + f32.const inf + call $~lib/typedarray/Float32Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 4 + call $~lib/typedarray/Int64Array#constructor + local.tee $58 + i32.store offset=108 + local.get $58 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 0 + i64.const -10 + call $~lib/typedarray/Int64Array#__set + local.get $58 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=4 + local.get $64 i32.const 1 - i32.const 0 - call $~lib/typedarray/Int32Array#fill - drop - local.get $12 + i64.const 100 + call $~lib/typedarray/Int64Array#__set + local.get $58 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 i32.const 2 - i32.const 17 - i32.const 1168 - call $~lib/rt/__newArray + i64.const 10 + call $~lib/typedarray/Int64Array#__set + local.get $58 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=20 + i32.store offset=4 local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 193 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 3 + i64.const 300 + call $~lib/typedarray/Int64Array#__set global.get $~lib/memory/__stack_pointer - local.get $12 + i32.const 0 + i32.const 2 + call $~lib/typedarray/Int32Array#constructor + local.tee $59 + i32.store offset=112 + local.get $59 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 1 - i32.const 4 - call $~lib/typedarray/Int32Array#subarray - local.tee $18 - i32.store offset=32 - local.get $18 + i32.const 0 + i32.const 300 + call $~lib/typedarray/Int32Array#__set + local.get $59 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - i32.const 0 i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#fill@varargs - drop - local.get $18 + i32.const -1 + call $~lib/typedarray/Int32Array#__set + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/typedarray/Int32Array#get:length - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 197 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $18 + local.get $57 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset i32.const 1 - i32.const 4 - i32.mul - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 198 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $18 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 + local.get $58 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 i32.const 4 - i32.mul - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 199 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $18 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 3 - i32.const 2 - i32.const 17 - i32.const 1216 - call $~lib/rt/__newArray + local.get $59 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=20 local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 200 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $12 + i32.const 8 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1248 + i32.const 10 + i32.const 0 + i32.const 64 + i32.const 14256 call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=20 local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 201 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 6 - call $~lib/typedarray/Int8Array#constructor - local.tee $21 - i32.store offset=36 - local.get $21 + i32.const 4 + call $~lib/typedarray/Uint32Array#constructor + local.tee $61 + i32.store offset=116 + local.get $61 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 @@ -88143,3162 +88858,4456 @@ local.get $64 i32.const 0 i32.const 1 - call $~lib/typedarray/Int8Array#__set - local.get $21 + call $~lib/typedarray/Uint32Array#__set + local.get $61 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 1 - i32.const 2 - call $~lib/typedarray/Int8Array#__set - local.get $21 + i32.const 300 + call $~lib/typedarray/Uint32Array#__set + local.get $61 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 2 - i32.const 3 - call $~lib/typedarray/Int8Array#__set - local.get $21 + i32.const 100 + call $~lib/typedarray/Uint32Array#__set + local.get $61 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 i32.const 3 + i32.const -1 + call $~lib/typedarray/Uint32Array#__set + global.get $~lib/memory/__stack_pointer + i32.const 0 i32.const 4 - call $~lib/typedarray/Int8Array#__set - local.get $21 + call $~lib/typedarray/Int16Array#constructor + local.tee $62 + i32.store offset=120 + local.get $62 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 4 - i32.const 5 - call $~lib/typedarray/Int8Array#__set - local.get $21 + i32.const 0 + i32.const -10 + call $~lib/typedarray/Int16Array#__set + local.get $62 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 5 - i32.const 6 - call $~lib/typedarray/Int8Array#__set - global.get $~lib/memory/__stack_pointer - local.get $21 + i32.const 1 + i32.const 100 + call $~lib/typedarray/Int16Array#__set + local.get $62 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 1 - i32.const 6 - call $~lib/typedarray/Int8Array#subarray - local.tee $22 - i32.store offset=40 - local.get $22 + i32.const 2 + i32.const 10 + call $~lib/typedarray/Int16Array#__set + local.get $62 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 0 - call $~lib/typedarray/Int8Array#__get - i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 222 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $22 + i32.const 3 + i32.const 300 + call $~lib/typedarray/Int16Array#__set + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/typedarray/Int8Array#get:length - i32.const 5 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 223 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $22 + local.get $61 + local.set $64 + global.get $~lib/memory/__stack_pointer + local.get $64 + i32.store offset=20 + local.get $64 + i32.const 0 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 224 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $22 + local.get $62 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 5 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 225 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $22 + call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> + local.get $56 local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 i32.store offset=4 local.get $64 - i32.const 1 - i32.const 5 - call $~lib/typedarray/Int8Array#subarray - local.tee $23 - i32.store offset=44 - local.get $23 + i32.const 10 + i32.const 0 + i32.const 64 + i32.const 14288 + call $~lib/rt/__newArray local.set $64 global.get $~lib/memory/__stack_pointer local.get $64 - i32.store offset=4 + i32.store offset=20 local.get $64 + call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + call $"std/typedarray/testArraySort<~lib/typedarray/Int8Array,i8>" + call $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>" + call $"std/typedarray/testArraySort<~lib/typedarray/Uint8ClampedArray,u8>" + call $"std/typedarray/testArraySort<~lib/typedarray/Int16Array,i16>" + call $"std/typedarray/testArraySort<~lib/typedarray/Uint16Array,u16>" + call $"std/typedarray/testArraySort<~lib/typedarray/Int32Array,i32>" + call $"std/typedarray/testArraySort<~lib/typedarray/Uint32Array,u32>" + call $"std/typedarray/testArraySort<~lib/typedarray/Int64Array,i64>" + call $"std/typedarray/testArraySort<~lib/typedarray/Uint64Array,u64>" + call $"std/typedarray/testArraySort<~lib/typedarray/Float32Array,f32>" + call $"std/typedarray/testArraySort<~lib/typedarray/Float64Array,f64>" + global.get $~lib/memory/__heap_base + global.set $~lib/memory/__stack_pointer + call $~lib/rt/itcms/__collect + global.get $~lib/memory/__stack_pointer + i32.const 124 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp f64) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/typedarray/Int8Array#__get - i32.const 3 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 228 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $23 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $12) + i32.const 0 + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $12) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + f64.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + f64.load + f64.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + local.get $tmp + f64.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + f64.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $12) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) + (local $bufferSize i32) + (local $buffer i32) + (local $array i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $length + local.get $alignLog2 + i32.shl + local.set $bufferSize + global.get $~lib/memory/__stack_pointer + local.get $bufferSize + i32.const 1 + local.get $data + call $~lib/rt/__newBuffer + local.tee $buffer + i32.store + i32.const 16 + local.get $id + call $~lib/rt/itcms/__new + local.set $array + local.get $array + local.get $buffer + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $array + local.get $buffer + i32.const 0 + call $~lib/rt/itcms/__link + local.get $array + local.get $buffer i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int8Array#get:length + local.get $array + local.get $bufferSize + i32.store offset=8 + local.get $array + local.get $length + i32.store offset=12 + local.get $array + local.set $7 + global.get $~lib/memory/__stack_pointer i32.const 4 - i32.eq - i32.eqz + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + ) + (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) + (local $sign i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|8 i32) + (local $buffer|9 i32) + (local $num|10 i32) + (local $offset|11 i32) + (local $val32 i32) + (local $decimals|13 i32) + (local $14 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end if - i32.const 0 - i32.const 544 - i32.const 229 - i32.const 3 + i32.const 6784 + i32.const 6912 + i32.const 373 + i32.const 5 call $~lib/builtins/abort unreachable end - local.get $23 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 2 - i32.eq + local.get $value i32.eqz + if + i32.const 6976 + local.set $14 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + end + local.get $value + i32.const 31 + i32.shr_u + i32.const 1 + i32.shl + local.set $sign + local.get $sign if i32.const 0 - i32.const 544 - i32.const 230 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $value + i32.sub + local.set $value end - local.get $23 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 4 + local.get $radix + i32.const 10 i32.eq - i32.eqz if + local.get $value + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer + local.get $value + local.set $num + local.get $decimals + local.set $offset i32.const 0 - i32.const 544 - i32.const 231 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 31 + local.get $value + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|8 + global.get $~lib/memory/__stack_pointer + local.get $decimals|8 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|9 + local.get $value + local.set $num|10 + local.get $decimals|8 + local.set $offset|11 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|9 + local.get $num|10 + i64.extend_i32_u + local.get $offset|11 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.set $val32 + local.get $val32 + i64.extend_i32_u + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|13 + global.get $~lib/memory/__stack_pointer + local.get $decimals|13 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.get $val32 + i64.extend_i32_u + local.get $decimals|13 + local.get $radix + call $~lib/util/number/utoa64_any_core + end + end + local.get $sign + if + local.get $out + i32.const 45 + i32.store16 end + local.get $out + local.set $14 global.get $~lib/memory/__stack_pointer - local.get $23 - local.set $64 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $14 + return + ) + (func $~lib/util/number/utoa32 (param $value i32) (param $radix i32) (result i32) + (local $out i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|7 i32) + (local $buffer|8 i32) + (local $num|9 i32) + (local $offset|10 i32) + (local $decimals|11 i32) + (local $12 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 i32.const 4 - call $~lib/typedarray/Int8Array#subarray - local.tee $24 - i32.store offset=48 - local.get $24 - local.set $64 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 0 - call $~lib/typedarray/Int8Array#__get - i32.const 4 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 234 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.store + local.get $radix + i32.const 2 + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s end - local.get $24 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int8Array#get:length - i32.const 3 - i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 235 - i32.const 3 + i32.const 6784 + i32.const 6912 + i32.const 350 + i32.const 5 call $~lib/builtins/abort unreachable end - local.get $24 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 3 - i32.eq + local.get $value i32.eqz if - i32.const 0 - i32.const 544 - i32.const 236 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 6976 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return end - local.get $24 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 3 + local.get $radix + i32.const 10 i32.eq - i32.eqz if + local.get $value + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer + local.get $value + local.set $num + local.get $decimals + local.set $offset i32.const 0 - i32.const 544 - i32.const 237 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 31 + local.get $value + i32.clz + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|7 + global.get $~lib/memory/__stack_pointer + local.get $decimals|7 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|8 + local.get $value + local.set $num|9 + local.get $decimals|7 + local.set $offset|10 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|8 + local.get $num|9 + i64.extend_i32_u + local.get $offset|10 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + i64.extend_i32_u + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|11 + global.get $~lib/memory/__stack_pointer + local.get $decimals|11 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $value + i64.extend_i32_u + local.get $decimals|11 + local.get $radix + call $~lib/util/number/utoa64_any_core + end end + local.get $out + local.set $12 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Int32Array#constructor - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - call $~lib/typedarray/Int32Array#__set - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#__set - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - i32.const 3 - call $~lib/typedarray/Int32Array#__set - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 3 i32.const 4 - call $~lib/typedarray/Int32Array#__set - local.get $25 - local.set $64 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + ) + (func $~lib/util/number/itoa64 (param $value i64) (param $radix i32) (result i32) + (local $sign i32) + (local $out i32) + (local $val32 i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|9 i32) + (local $buffer|10 i32) + (local $num|11 i64) + (local $offset|12 i32) + (local $decimals|13 i32) + (local $buffer|14 i32) + (local $num|15 i64) + (local $offset|16 i32) + (local $decimals|17 i32) + (local $18 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 4 - i32.const 5 - call $~lib/typedarray/Int32Array#__set - global.get $~lib/memory/__stack_pointer - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $26 - i32.store offset=56 - local.get $25 - local.set $64 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 0 - i32.const 3 - i32.const 2 - global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 + i32.store + local.get $radix i32.const 2 - i32.const 17 - i32.const 1296 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end if - i32.const 0 - i32.const 544 - i32.const 248 - i32.const 3 + i32.const 6784 + i32.const 6912 + i32.const 431 + i32.const 5 call $~lib/builtins/abort unreachable end - global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 1 - i32.const 3 - i32.const 2 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1344 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual + local.get $value + i64.const 0 + i64.ne i32.eqz if - i32.const 0 - i32.const 544 - i32.const 250 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 6976 + local.set $18 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $18 + return + end + local.get $value + i64.const 63 + i64.shr_u + i32.wrap_i64 + i32.const 1 + i32.shl + local.set $sign + local.get $sign + if + i64.const 0 + local.get $value + i64.sub + local.set $value + end + local.get $radix + i32.const 10 + i32.eq + if + local.get $value + global.get $~lib/builtins/u32.MAX_VALUE + i64.extend_i32_u + i64.le_u + if + local.get $value + i32.wrap_i64 + local.set $val32 + local.get $val32 + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer + local.get $val32 + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $value + call $~lib/util/number/decimalCount64High + local.set $decimals|9 + global.get $~lib/memory/__stack_pointer + local.get $decimals|9 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|10 + local.get $value + local.set $num|11 + local.get $decimals|9 + local.set $offset|12 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|10 + local.get $num|11 + local.get $offset|12 + call $~lib/util/number/utoa64_dec_lut + end + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 63 + local.get $value + i64.clz + i32.wrap_i64 + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|13 + global.get $~lib/memory/__stack_pointer + local.get $decimals|13 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.set $buffer|14 + local.get $value + local.set $num|15 + local.get $decimals|13 + local.set $offset|16 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|14 + local.get $num|15 + local.get $offset|16 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|17 + global.get $~lib/memory/__stack_pointer + local.get $decimals|17 + i32.const 1 + i32.shl + local.get $sign + i32.add + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $sign + i32.add + local.get $value + local.get $decimals|17 + local.get $radix + call $~lib/util/number/utoa64_any_core + end end - global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 1 - i32.const 2 - i32.const 2 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1392 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + local.get $sign if - i32.const 0 - i32.const 544 - i32.const 252 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $out + i32.const 45 + i32.store16 end + local.get $out + local.set $18 global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $18 + return + ) + (func $~lib/util/number/utoa64 (param $value i64) (param $radix i32) (result i32) + (local $out i32) + (local $val32 i32) + (local $decimals i32) + (local $buffer i32) + (local $num i32) + (local $offset i32) + (local $decimals|8 i32) + (local $buffer|9 i32) + (local $num|10 i64) + (local $offset|11 i32) + (local $decimals|12 i32) + (local $buffer|13 i32) + (local $num|14 i64) + (local $offset|15 i32) + (local $decimals|16 i32) + (local $17 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 2 - i32.const 2 - i32.const 2 - global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 + i32.store + local.get $radix i32.const 2 - i32.const 17 - i32.const 1440 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $radix + i32.const 36 + i32.gt_s + end if - i32.const 0 - i32.const 544 - i32.const 254 - i32.const 3 + i32.const 6784 + i32.const 6912 + i32.const 401 + i32.const 5 call $~lib/builtins/abort unreachable end - global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 0 - i32.const 3 - i32.const 4 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1488 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual + local.get $value + i64.const 0 + i64.ne i32.eqz if - i32.const 0 - i32.const 544 - i32.const 256 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 6976 + local.set $17 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return end - global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 1 - i32.const 3 - i32.const 4 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1536 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + local.get $radix + i32.const 10 + i32.eq if - i32.const 0 - i32.const 544 - i32.const 258 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $value + global.get $~lib/builtins/u32.MAX_VALUE + i64.extend_i32_u + i64.le_u + if + local.get $value + i32.wrap_i64 + local.set $val32 + local.get $val32 + call $~lib/util/number/decimalCount32 + local.set $decimals + global.get $~lib/memory/__stack_pointer + local.get $decimals + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer + local.get $val32 + local.set $num + local.get $decimals + local.set $offset + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer + local.get $num + local.get $offset + call $~lib/util/number/utoa32_dec_lut + else + local.get $value + call $~lib/util/number/decimalCount64High + local.set $decimals|8 + global.get $~lib/memory/__stack_pointer + local.get $decimals|8 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|9 + local.get $value + local.set $num|10 + local.get $decimals|8 + local.set $offset|11 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|9 + local.get $num|10 + local.get $offset|11 + call $~lib/util/number/utoa64_dec_lut + end + else + local.get $radix + i32.const 16 + i32.eq + if + i32.const 63 + local.get $value + i64.clz + i32.wrap_i64 + i32.sub + i32.const 2 + i32.shr_s + i32.const 1 + i32.add + local.set $decimals|12 + global.get $~lib/memory/__stack_pointer + local.get $decimals|12 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.set $buffer|13 + local.get $value + local.set $num|14 + local.get $decimals|12 + local.set $offset|15 + i32.const 0 + i32.const 1 + i32.ge_s + drop + local.get $buffer|13 + local.get $num|14 + local.get $offset|15 + call $~lib/util/number/utoa_hex_lut + else + local.get $value + local.get $radix + call $~lib/util/number/ulog_base + local.set $decimals|16 + global.get $~lib/memory/__stack_pointer + local.get $decimals|16 + i32.const 1 + i32.shl + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $out + i32.store + local.get $out + local.get $value + local.get $decimals|16 + local.get $radix + call $~lib/util/number/utoa64_any_core + end end + local.get $out + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 1 - i32.const 2 i32.const 4 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $17 + return + ) + (func $~lib/util/number/dtoa (param $value f32) (result i32) + (local $value|1 f64) + (local $isSingle i32) + (local $size i32) + (local $result i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1584 - call $~lib/rt/__newArray - local.set $64 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 260 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.const 0 + i32.store + block $~lib/util/number/dtoa_impl|inlined.0 (result i32) + local.get $value + f64.promote_f32 + local.set $value|1 + i32.const 1 + local.set $isSingle + local.get $value|1 + f64.const 0 + f64.eq + if + i32.const 8640 + br $~lib/util/number/dtoa_impl|inlined.0 + end + local.get $value|1 + local.get $value|1 + f64.sub + f64.const 0 + f64.eq + i32.eqz + if + local.get $value|1 + local.get $value|1 + f64.ne + if + i32.const 8672 + br $~lib/util/number/dtoa_impl|inlined.0 + end + i32.const 8704 + i32.const 8752 + local.get $value|1 + f64.const 0 + f64.lt + select + br $~lib/util/number/dtoa_impl|inlined.0 + end + i32.const 8784 + local.get $value|1 + local.get $isSingle + call $~lib/util/number/dtoa_core + i32.const 1 + i32.shl + local.set $size + global.get $~lib/memory/__stack_pointer + local.get $size + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result + i32.store + local.get $result + i32.const 8784 + local.get $size + memory.copy + local.get $result + br $~lib/util/number/dtoa_impl|inlined.0 end + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/util/number/dtoa (param $value f64) (result i32) + (local $value|1 f64) + (local $isSingle i32) + (local $size i32) + (local $result i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const 0 - i32.const -2 - i32.const 2 - global.set $~argumentsLength i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1632 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if + i32.store + block $~lib/util/number/dtoa_impl|inlined.1 (result i32) + local.get $value + local.set $value|1 i32.const 0 - i32.const 544 - i32.const 262 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.set $isSingle + local.get $value|1 + f64.const 0 + f64.eq + if + i32.const 8640 + br $~lib/util/number/dtoa_impl|inlined.1 + end + local.get $value|1 + local.get $value|1 + f64.sub + f64.const 0 + f64.eq + i32.eqz + if + local.get $value|1 + local.get $value|1 + f64.ne + if + i32.const 8672 + br $~lib/util/number/dtoa_impl|inlined.1 + end + i32.const 8704 + i32.const 8752 + local.get $value|1 + f64.const 0 + f64.lt + select + br $~lib/util/number/dtoa_impl|inlined.1 + end + i32.const 8784 + local.get $value|1 + local.get $isSingle + call $~lib/util/number/dtoa_core + i32.const 1 + i32.shl + local.set $size + global.get $~lib/memory/__stack_pointer + local.get $size + i32.const 2 + call $~lib/rt/itcms/__new + local.tee $result + i32.store + local.get $result + i32.const 8784 + local.get $size + memory.copy + local.get $result + br $~lib/util/number/dtoa_impl|inlined.1 end + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + return + ) + (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) + (local $buffer i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 i32.const 0 - i32.const -2 - i32.const -1 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1680 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + i32.store + local.get $length + i32.const 1073741820 + i32.gt_u if - i32.const 0 - i32.const 544 - i32.const 264 - i32.const 3 + i32.const 32 + i32.const 80 + i32.const 52 + i32.const 43 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 + local.get $length i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const -4 - i32.const -3 - i32.const -2 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 + call $~lib/rt/itcms/__new + local.tee $buffer + i32.store i32.const 2 - i32.const 17 - i32.const 1728 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 266 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 + global.get $~lib/shared/runtime/Runtime.Incremental + i32.ne + drop + local.get $buffer + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const -4 - i32.const -3 - i32.const -1 - call $~lib/typedarray/Int32Array#copyWithin - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1776 - call $~lib/rt/__newArray - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + i32.const 0 + i32.store offset=8 + local.get $i + local.get $right + i32.eq if - i32.const 0 - i32.const 544 - i32.const 268 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $26 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j i32.const 0 + i32.shl + i32.add + i32.load8_s + local.get $ptr + local.get $j i32.const 1 - global.set $~argumentsLength + i32.add + local.tee $j i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $25 - i32.store offset=52 - local.get $25 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=60 - local.get $64 - i32.const -4 - i32.const -3 + i32.shl + i32.add + i32.load8_s i32.const 2 global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) i32.const 0 - call $~lib/typedarray/Int32Array#copyWithin@varargs - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 5 - i32.const 2 - i32.const 17 - i32.const 1824 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/isInt32ArrayEqual - i32.eqz + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 270 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 5 - call $~lib/typedarray/Int32Array#constructor - local.tee $39 - i32.store offset=64 - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 1 - call $~lib/typedarray/Int32Array#__set - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#__set - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - i32.const 3 - call $~lib/typedarray/Int32Array#__set - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 3 - i32.const 4 - call $~lib/typedarray/Int32Array#__set - local.get $39 - local.set $64 + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_s offset=1 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_s + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_s + local.set $tmp + local.get $ptr + local.get $i + i32.const 0 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 0 + i32.shl + i32.add + i32.load8_s + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 0 + i32.shl + i32.add + local.get $tmp + i32.store8 + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_s offset=1 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_s + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 4 - i32.const 5 - call $~lib/typedarray/Int32Array#__set + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $39 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 4 - call $~lib/typedarray/Int32Array#subarray - local.tee $40 - i32.store offset=68 - local.get $40 - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int32Array#get:length - i32.const 3 + i32.const 0 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 282 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $40 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 4 - i32.eq - i32.eqz + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 0 + i32.shl + i32.add + i32.load8_u + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 283 - i32.const 3 - call $~lib/builtins/abort - unreachable + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_u offset=1 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_u + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 0 + i32.shl + i32.add + i32.load8_u + local.set $tmp + local.get $ptr + local.get $i + i32.const 0 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 0 + i32.shl + i32.add + i32.load8_u + i32.store8 + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 0 + i32.shl + i32.add + local.get $tmp + i32.store8 + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_u offset=1 + local.get $ptr + local.get $j + i32.const 0 + i32.shl + i32.add + i32.load8_u + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end end - local.get $40 - local.set $64 + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength i32.const 12 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 284 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $39 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 3 - call $~lib/typedarray/Int32Array#slice - local.tee $41 - i32.store offset=72 - local.get $41 - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 0 - call $~lib/typedarray/Int32Array#__get - i32.const 2 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 287 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $41 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j i32.const 1 - call $~lib/typedarray/Int32Array#__get - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 288 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $41 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int32Array#get:length + i32.shl + i32.add + i32.load16_s + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 1 + i32.shl + i32.add + i32.load16_s i32.const 2 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 289 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $41 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) i32.const 0 - i32.eq - i32.eqz + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 290 - i32.const 3 - call $~lib/builtins/abort - unreachable + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_s offset=2 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_s + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_s + local.set $tmp + local.get $ptr + local.get $i + i32.const 1 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 1 + i32.shl + i32.add + i32.load16_s + i32.store16 + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 1 + i32.shl + i32.add + local.get $tmp + i32.store16 + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_s offset=2 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_s + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end end - local.get $41 - local.set $64 + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 8 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 291 - i32.const 3 - call $~lib/builtins/abort - unreachable - end + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $40 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 2 - call $~lib/typedarray/Int32Array#slice - local.tee $42 - i32.store offset=76 - local.get $42 - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 0 - call $~lib/typedarray/Int32Array#__get - i32.const 3 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 294 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $42 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int32Array#get:length + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j i32.const 1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 295 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $42 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 296 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $42 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.const 4 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 297 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 0 + i32.shl + i32.add + i32.load16_u + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.const 2 global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) i32.const 0 - call $~lib/typedarray/Int32Array#slice@varargs - local.tee $43 - i32.store offset=80 - local.get $43 - local.get $39 - i32.ne - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 300 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $43 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int32Array#get:length - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Int32Array#get:length - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 301 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $43 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteOffset - i32.eq - i32.eqz - if - i32.const 0 - i32.const 544 - i32.const 302 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $43 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - local.get $39 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/arraybuffer/ArrayBufferView#get:byteLength - i32.eq - i32.eqz + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 303 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - call $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testReduce<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testReduce<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testReduce<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testReduce<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testAt<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testAt<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testAt<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testAt<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testAt<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testAt<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testAt<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testAt<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testAt<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testAt<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testAt<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayFindLastIndex<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>" + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_u offset=2 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 1 + i32.shl + i32.add + i32.load16_u + local.set $tmp + local.get $ptr + local.get $i + i32.const 1 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.store16 + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 1 + i32.shl + i32.add + local.get $tmp + i32.store16 + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_u offset=2 + local.get $ptr + local.get $j + i32.const 1 + i32.shl + i32.add + i32.load16_u + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 1 - call $~lib/typedarray/Float64Array#constructor - local.tee $47 - i32.store offset=84 - local.get $47 - local.set $64 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - f64.const nan:0x8000000000000 - call $~lib/typedarray/Float64Array#__set - local.get $47 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - f64.const nan:0x8000000000000 i32.const 0 - call $~lib/typedarray/Float64Array#indexOf - i32.const -1 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 653 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $47 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - f64.const nan:0x8000000000000 - i32.const 0 - call $~lib/typedarray/Float64Array#includes - i32.const 0 - i32.ne + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + local.get $ptr + local.get $j i32.const 1 - i32.eq - i32.eqz + i32.add + local.tee $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 654 - i32.const 3 - call $~lib/builtins/abort - unreachable + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + i32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 1 - call $~lib/typedarray/Float32Array#constructor - local.tee $48 - i32.store offset=88 - local.get $48 - local.set $64 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - f32.const nan:0x400000 - call $~lib/typedarray/Float32Array#__set - local.get $48 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - f32.const nan:0x400000 i32.const 0 - call $~lib/typedarray/Float32Array#indexOf - i32.const -1 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 659 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end - local.get $48 - local.set $64 + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - f32.const nan:0x400000 - i32.const 0 - call $~lib/typedarray/Float32Array#includes - i32.const 0 - i32.ne + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + local.get $ptr + local.get $j i32.const 1 - i32.eq - i32.eqz + i32.add + local.tee $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $0) + i32.const 0 + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 660 - i32.const 3 - call $~lib/builtins/abort - unreachable + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $0) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + i32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + i32.load + i32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + i32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + i32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $0) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end end - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>" - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $50 - i32.store offset=92 + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $50 - local.set $64 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i64) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const 2 - global.set $~argumentsLength - i32.const 0 - call $~lib/typedarray/Uint8Array.wrap@varargs - local.tee $51 - i32.store offset=96 - local.get $51 - local.set $64 + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Uint8Array#get:length i32.const 0 + i32.store offset=8 + local.get $i + local.get $right i32.eq - i32.eqz if - i32.const 0 - i32.const 544 - i32.const 737 - i32.const 3 - call $~lib/builtins/abort - unreachable + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 2 - call $~lib/arraybuffer/ArrayBuffer#constructor - local.tee $50 - i32.store offset=92 - global.get $~lib/memory/__stack_pointer - local.get $50 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + local.get $ptr + local.get $j + i32.const 1 + i32.add + local.tee $j + i32.const 3 + i32.shl + i32.add + i64.load i32.const 2 global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $8) i32.const 0 - call $~lib/typedarray/Uint8Array.wrap@varargs - local.tee $51 - i32.store offset=96 - local.get $51 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - call $~lib/typedarray/Uint8Array#get:length - i32.const 0 - i32.eq - i32.eqz + i32.gt_s if - i32.const 0 - i32.const 544 - i32.const 741 - i32.const 3 - call $~lib/builtins/abort - unreachable + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $8) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + i64.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + i64.load + i64.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + local.get $tmp + i64.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $8) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end end - call $"std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>" - call $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array> - call $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array> - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 10 - call $~lib/typedarray/Uint8ClampedArray#constructor - local.tee $56 - i32.store offset=100 - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 3 - call $~lib/typedarray/Float32Array#constructor - local.tee $57 - i32.store offset=104 - local.get $57 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - f32.const 400 - call $~lib/typedarray/Float32Array#__set - local.get $57 - local.set $64 + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - f32.const nan:0x400000 - call $~lib/typedarray/Float32Array#__set - local.get $57 - local.set $64 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp i64) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - f32.const inf - call $~lib/typedarray/Float32Array#__set + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 4 - call $~lib/typedarray/Int64Array#constructor - local.tee $58 - i32.store offset=108 - local.get $58 - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 0 - i64.const -10 - call $~lib/typedarray/Int64Array#__set - local.get $58 - local.set $64 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + local.get $ptr + local.get $j i32.const 1 - i64.const 100 - call $~lib/typedarray/Int64Array#__set - local.get $58 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 2 - i64.const 10 - call $~lib/typedarray/Int64Array#__set - local.get $58 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + i32.add + local.tee $j i32.const 3 - i64.const 300 - call $~lib/typedarray/Int64Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 + i32.shl + i32.add + i64.load i32.const 2 - call $~lib/typedarray/Int32Array#constructor - local.tee $59 - i32.store offset=112 - local.get $59 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $8) i32.const 0 - i32.const 300 - call $~lib/typedarray/Int32Array#__set - local.get $59 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const -1 - call $~lib/typedarray/Int32Array#__set - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - local.get $57 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - i32.const 1 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - local.get $58 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - i32.const 4 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - local.get $59 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - i32.const 8 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> - local.get $56 - local.set $64 + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $8) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + i64.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 3 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + i64.load + i64.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 3 + i32.shl + i32.add + local.get $tmp + i64.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load offset=8 + local.get $ptr + local.get $j + i32.const 3 + i32.shl + i32.add + i64.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $8) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 10 - i32.const 0 - i32.const 64 - i32.const 14256 - call $~lib/rt/__newArray - local.set $64 + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) + (local $j i32) + (local $5 i32) + (local $6 i32) + (local $k i32) + (local $tmp f32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> + i32.const 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 4 - call $~lib/typedarray/Uint32Array#constructor - local.tee $61 - i32.store offset=116 - local.get $61 - local.set $64 + i64.const 0 + i64.store global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 i32.const 0 - i32.const 1 - call $~lib/typedarray/Uint32Array#__set - local.get $61 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 1 - i32.const 300 - call $~lib/typedarray/Uint32Array#__set - local.get $61 - local.set $64 + i32.store offset=8 + local.get $i + local.get $right + i32.eq + if + local.get $i + local.set $10 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $10 + return + end + local.get $i + local.set $j global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + local.get $comparator + local.tee $5 + i32.store + local.get $ptr + local.get $j i32.const 2 - i32.const 100 - call $~lib/typedarray/Uint32Array#__set - local.get $61 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 3 - i32.const -1 - call $~lib/typedarray/Uint32Array#__set - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 4 - call $~lib/typedarray/Int16Array#constructor - local.tee $62 - i32.store offset=120 - local.get $62 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 0 - i32.const -10 - call $~lib/typedarray/Int16Array#__set - local.get $62 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + i32.shl + i32.add + f32.load + local.get $ptr + local.get $j i32.const 1 - i32.const 100 - call $~lib/typedarray/Int16Array#__set - local.get $62 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 + i32.add + local.tee $j i32.const 2 - i32.const 10 - call $~lib/typedarray/Int16Array#__set - local.get $62 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 3 - i32.const 300 - call $~lib/typedarray/Int16Array#__set - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - local.get $61 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - i32.const 0 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - local.get $62 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - i32.const 5 - call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> - local.get $56 - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=4 - local.get $64 - i32.const 10 + i32.shl + i32.add + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $5 + i32.load + call_indirect (type $13) i32.const 0 - i32.const 64 - i32.const 14288 - call $~lib/rt/__newArray - local.set $64 - global.get $~lib/memory/__stack_pointer - local.get $64 - i32.store offset=20 - local.get $64 - call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray> - call $"std/typedarray/testArraySort<~lib/typedarray/Int8Array,i8>" - call $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>" - call $"std/typedarray/testArraySort<~lib/typedarray/Uint8ClampedArray,u8>" - call $"std/typedarray/testArraySort<~lib/typedarray/Int16Array,i16>" - call $"std/typedarray/testArraySort<~lib/typedarray/Uint16Array,u16>" - call $"std/typedarray/testArraySort<~lib/typedarray/Int32Array,i32>" - call $"std/typedarray/testArraySort<~lib/typedarray/Uint32Array,u32>" - call $"std/typedarray/testArraySort<~lib/typedarray/Int64Array,i64>" - call $"std/typedarray/testArraySort<~lib/typedarray/Uint64Array,u64>" - call $"std/typedarray/testArraySort<~lib/typedarray/Float32Array,f32>" - call $"std/typedarray/testArraySort<~lib/typedarray/Float64Array,f64>" - global.get $~lib/memory/__heap_base - global.set $~lib/memory/__stack_pointer - call $~lib/rt/itcms/__collect + i32.gt_s + if + loop $while-continue|0 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $6 + i32.store offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $6 + i32.load + call_indirect (type $13) + i32.const 31 + i32.shr_u + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|0 + end + end + local.get $j + local.set $k + loop $while-continue|1 + local.get $i + local.get $k + i32.lt_s + if + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + f32.load + local.set $tmp + local.get $ptr + local.get $i + i32.const 2 + i32.shl + i32.add + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + f32.load + f32.store + local.get $i + i32.const 1 + i32.add + local.set $i + local.get $ptr + local.get $k + i32.const 2 + i32.shl + i32.add + local.get $tmp + f32.store + local.get $k + i32.const 1 + i32.sub + local.set $k + br $while-continue|1 + end + end + else + loop $while-continue|2 + local.get $j + local.get $right + i32.lt_s + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $comparator + local.tee $9 + i32.store offset=8 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load offset=4 + local.get $ptr + local.get $j + i32.const 2 + i32.shl + i32.add + f32.load + i32.const 2 + global.set $~argumentsLength + local.get $9 + i32.load + call_indirect (type $13) + i32.const 0 + i32.ge_s + else + i32.const 0 + end + if + local.get $j + i32.const 1 + i32.add + local.set $j + br $while-continue|2 + end + end + end + local.get $j + local.set $10 global.get $~lib/memory/__stack_pointer - i32.const 124 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $10 + return + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/typedarray/forEachValues + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/testArrayReverseValues + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/testArrayIndexOfAndLastIndexOfValues + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/testArrayWrapValues + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/setSource1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/setSource2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/setSource3 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/typedarray/setSource7 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 144 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 7408 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 8464 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/typedarray/Int8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint8ClampedArray~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint16Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Int64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Uint64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/typedarray/Float32Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit ) - (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/typedarray/Float64Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + ) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 0 - drop + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit + ) + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit + ) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/array/Array#get:buffer (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load ) - (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/function/Function<%28i8%2Ci8%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i8%2Ci8%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u8%2Cu8%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u8%2Cu8%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i16%2Ci16%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i16%2Ci16%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u16%2Cu16%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u16%2Cu16%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit + ) + (func $~lib/function/Function<%28i64%2Ci64%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28i64%2Ci64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%29=>i32>#__visit + ) + (func $~lib/function/Function<%28u64%2Cu64%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 ) - (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store + (func $~lib/function/Function<%28u64%2Cu64%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%29=>i32>#__visit + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env (param $this i32) (result i32) local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer + i32.load offset=4 + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/function/Function<%28f32%2Cf32%29=>i32> + block $~lib/function/Function<%28u64%2Cu64%29=>i32> + block $~lib/function/Function<%28i64%2Ci64%29=>i32> + block $~lib/function/Function<%28u32%2Cu32%29=>i32> + block $~lib/function/Function<%28i32%2Ci32%29=>i32> + block $~lib/function/Function<%28u16%2Cu16%29=>i32> + block $~lib/function/Function<%28i16%2Ci16%29=>i32> + block $~lib/function/Function<%28u8%2Cu8%29=>i32> + block $~lib/function/Function<%28i8%2Ci8%29=>i32> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> + block $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> + block $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> + block $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> + block $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> + block $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> + block $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> + block $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> + block $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> + block $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> + block $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> + block $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> + block $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> + block $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> + block $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> + block $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> + block $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> + block $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> + block $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> + block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> + block $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> + block $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> + block $~lib/array/Array + block $~lib/array/Array + block $~lib/function/Function<%28f64%2Cf64%29=>i32> + block $~lib/typedarray/Float64Array + block $~lib/typedarray/Float32Array + block $~lib/typedarray/Uint64Array + block $~lib/typedarray/Int64Array + block $~lib/typedarray/Uint32Array + block $~lib/typedarray/Int32Array + block $~lib/typedarray/Uint16Array + block $~lib/typedarray/Int16Array + block $~lib/typedarray/Uint8ClampedArray + block $~lib/typedarray/Uint8Array + block $~lib/typedarray/Int8Array + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/typedarray/Int8Array $~lib/typedarray/Uint8Array $~lib/typedarray/Uint8ClampedArray $~lib/typedarray/Int16Array $~lib/typedarray/Uint16Array $~lib/typedarray/Int32Array $~lib/typedarray/Uint32Array $~lib/typedarray/Int64Array $~lib/typedarray/Uint64Array $~lib/typedarray/Float32Array $~lib/typedarray/Float64Array $~lib/function/Function<%28f64%2Cf64%29=>i32> $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool> $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void> $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void> $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void> $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void> $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void> $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void> $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void> $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void> $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void> $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/array/Array $~lib/function/Function<%28i8%2Ci8%29=>i32> $~lib/function/Function<%28u8%2Cu8%29=>i32> $~lib/function/Function<%28i16%2Ci16%29=>i32> $~lib/function/Function<%28u16%2Cu16%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $~lib/function/Function<%28u32%2Cu32%29=>i32> $~lib/function/Function<%28i64%2Ci64%29=>i32> $~lib/function/Function<%28u64%2Cu64%29=>i32> $~lib/function/Function<%28f32%2Cf32%29=>i32> $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint8ClampedArray~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint16Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Int64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Uint64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float32Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/typedarray/Float64Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i8%2Ci8%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u8%2Cu8%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i16%2Ci16%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u16%2Cu16%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28i64%2Ci64%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28u64%2Cu64%29=>i32>~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>~visit + return + end + unreachable ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28f64%2Cf64%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91308,7 +93317,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -91316,7 +93327,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28f64%2Cf64%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91324,7 +93335,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91334,32 +93345,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store i32.const 0 drop local.get $this @@ -91368,7 +93357,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91376,7 +93365,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91386,32 +93375,10 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store i32.const 0 drop local.get $this @@ -91420,7 +93387,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/array/Array#get:buffer local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91428,7 +93395,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91438,7 +93405,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -91446,7 +93415,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28i8%2Ci8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91454,7 +93423,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91464,7 +93433,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -91472,7 +93443,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91480,7 +93451,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91490,7 +93461,9 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - i32.const 0 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne drop local.get $this local.set $2 @@ -91498,31 +93471,7 @@ local.get $2 i32.store local.get $2 - call $~lib/array/Array#get:buffer - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/function/Function<%28i8%2Ci8%29=>i32>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28i8%2Ci8%29=>i32>#get:_env + call $~lib/function/Function<%28u8%2Cu8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91530,7 +93479,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28u8%2Cu8%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91540,13 +93489,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28u8%2Cu8%29=>i32>#get:_env + call $~lib/function/Function<%28i16%2Ci16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91554,7 +93507,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i16%2Ci16%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91564,13 +93517,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i16%2Ci16%29=>i32>#get:_env + call $~lib/function/Function<%28u16%2Cu16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91578,7 +93535,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28u16%2Cu16%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91588,13 +93545,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28u16%2Cu16%29=>i32>#get:_env + call $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91602,7 +93563,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91612,13 +93573,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + call $~lib/function/Function<%28u32%2Cu32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91626,7 +93591,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91636,13 +93601,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env + call $~lib/function/Function<%28i64%2Ci64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91650,7 +93619,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28i64%2Ci64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91660,13 +93629,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28i64%2Ci64%29=>i32>#get:_env + call $~lib/function/Function<%28u64%2Cu64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91674,7 +93647,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28u64%2Cu64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91684,13 +93657,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 i32.store local.get $2 - call $~lib/function/Function<%28u64%2Cu64%29=>i32>#get:_env + call $~lib/function/Function<%28f32%2Cf32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env local.get $cookie call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer @@ -91698,7 +93675,7 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (func $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $this i32) (param $cookie i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -91708,219 +93685,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp f64) - (local $9 i32) - (local $10 i32) - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 - i32.store - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 3 - i32.shl - i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $12) - i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $12) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - f64.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - f64.load - f64.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - local.get $tmp - f64.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - f64.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $12) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f64%2Cf64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/rt/__newArray (param $length i32) (param $alignLog2 i32) (param $id i32) (param $data i32) (result i32) - (local $bufferSize i32) - (local $buffer i32) - (local $array i32) - (local $7 i32) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -91929,60 +93713,82 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $length - local.get $alignLog2 - i32.shl - local.set $bufferSize + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $bufferSize - i32.const 1 - local.get $data - call $~lib/rt/__newBuffer - local.tee $buffer + local.get $2 i32.store - i32.const 16 - local.get $id - call $~lib/rt/itcms/__new - local.set $array - local.get $array - local.get $buffer + local.get $2 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>i8>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 i32.store - local.get $array - local.get $buffer + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>u8>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - call $~lib/rt/itcms/__link - local.get $array - local.get $buffer - i32.store offset=4 - local.get $array - local.get $bufferSize - i32.store offset=8 - local.get $array - local.get $length - i32.store offset=12 - local.get $array - local.set $7 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>u8>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $7 - return ) - (func $~lib/util/number/itoa32 (param $value i32) (param $radix i32) (result i32) - (local $sign i32) - (local $out i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|8 i32) - (local $buffer|9 i32) - (local $num|10 i32) - (local $offset|11 i32) - (local $val32 i32) - (local $decimals|13 i32) - (local $14 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -91991,178 +93797,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6784 - i32.const 6912 - i32.const 373 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i32.eqz - if - i32.const 6976 - local.set $14 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $14 - return - end - local.get $value - i32.const 31 - i32.shr_u - i32.const 1 - i32.shl - local.set $sign - local.get $sign - if - i32.const 0 - local.get $value - i32.sub - local.set $value - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer - local.get $value - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $radix - i32.const 16 - i32.eq - if - i32.const 31 - local.get $value - i32.clz - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|8 - global.get $~lib/memory/__stack_pointer - local.get $decimals|8 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|9 - local.get $value - local.set $num|10 - local.get $decimals|8 - local.set $offset|11 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|9 - local.get $num|10 - i64.extend_i32_u - local.get $offset|11 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.set $val32 - local.get $val32 - i64.extend_i32_u - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|13 - global.get $~lib/memory/__stack_pointer - local.get $decimals|13 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.get $val32 - i64.extend_i32_u - local.get $decimals|13 - local.get $radix - call $~lib/util/number/utoa64_any_core - end - end - local.get $sign - if - local.get $out - i32.const 45 - i32.store16 - end - local.get $out - local.set $14 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>i16>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $14 - return ) - (func $~lib/util/number/utoa32 (param $value i32) (param $radix i32) (result i32) - (local $out i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|7 i32) - (local $buffer|8 i32) - (local $num|9 i32) - (local $offset|10 i32) - (local $decimals|11 i32) - (local $12 i32) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92171,151 +93825,110 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6784 - i32.const 6912 - i32.const 350 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i32.eqz - if - i32.const 6976 - local.set $12 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $12 - return - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer - local.get $value - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $radix - i32.const 16 - i32.eq - if - i32.const 31 - local.get $value - i32.clz - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|7 - global.get $~lib/memory/__stack_pointer - local.get $decimals|7 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|8 - local.get $value - local.set $num|9 - local.get $decimals|7 - local.set $offset|10 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|8 - local.get $num|9 - i64.extend_i32_u - local.get $offset|10 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - i64.extend_i32_u - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|11 - global.get $~lib/memory/__stack_pointer - local.get $decimals|11 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $value - i64.extend_i32_u - local.get $decimals|11 - local.get $radix - call $~lib/util/number/utoa64_any_core - end - end - local.get $out - local.set $12 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>u16>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>u32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>i64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $12 - return ) - (func $~lib/util/number/itoa64 (param $value i64) (param $radix i32) (result i32) - (local $sign i32) - (local $out i32) - (local $val32 i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|9 i32) - (local $buffer|10 i32) - (local $num|11 i64) - (local $offset|12 i32) - (local $decimals|13 i32) - (local $buffer|14 i32) - (local $num|15 i64) - (local $offset|16 i32) - (local $decimals|17 i32) - (local $18 i32) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92324,221 +93937,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6784 - i32.const 6912 - i32.const 431 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i64.const 0 - i64.ne - i32.eqz - if - i32.const 6976 - local.set $18 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $18 - return - end - local.get $value - i64.const 63 - i64.shr_u - i32.wrap_i64 - i32.const 1 - i32.shl - local.set $sign - local.get $sign - if - i64.const 0 - local.get $value - i64.sub - local.set $value - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - global.get $~lib/builtins/u32.MAX_VALUE - i64.extend_i32_u - i64.le_u - if - local.get $value - i32.wrap_i64 - local.set $val32 - local.get $val32 - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer - local.get $val32 - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $value - call $~lib/util/number/decimalCount64High - local.set $decimals|9 - global.get $~lib/memory/__stack_pointer - local.get $decimals|9 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|10 - local.get $value - local.set $num|11 - local.get $decimals|9 - local.set $offset|12 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|10 - local.get $num|11 - local.get $offset|12 - call $~lib/util/number/utoa64_dec_lut - end - else - local.get $radix - i32.const 16 - i32.eq - if - i32.const 63 - local.get $value - i64.clz - i32.wrap_i64 - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|13 - global.get $~lib/memory/__stack_pointer - local.get $decimals|13 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.set $buffer|14 - local.get $value - local.set $num|15 - local.get $decimals|13 - local.set $offset|16 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|14 - local.get $num|15 - local.get $offset|16 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|17 - global.get $~lib/memory/__stack_pointer - local.get $decimals|17 - i32.const 1 - i32.shl - local.get $sign - i32.add - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $sign - i32.add - local.get $value - local.get $decimals|17 - local.get $radix - call $~lib/util/number/utoa64_any_core - end - end - local.get $sign - if - local.get $out - i32.const 45 - i32.store16 - end - local.get $out - local.set $18 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>u64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $18 - return ) - (func $~lib/util/number/utoa64 (param $value i64) (param $radix i32) (result i32) - (local $out i32) - (local $val32 i32) - (local $decimals i32) - (local $buffer i32) - (local $num i32) - (local $offset i32) - (local $decimals|8 i32) - (local $buffer|9 i32) - (local $num|10 i64) - (local $offset|11 i32) - (local $decimals|12 i32) - (local $buffer|13 i32) - (local $num|14 i64) - (local $offset|15 i32) - (local $decimals|16 i32) - (local $17 i32) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92547,174 +93965,138 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $radix i32.const 2 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $radix - i32.const 36 - i32.gt_s - end - if - i32.const 6784 - i32.const 6912 - i32.const 401 - i32.const 5 - call $~lib/builtins/abort - unreachable - end - local.get $value - i64.const 0 - i64.ne - i32.eqz - if - i32.const 6976 - local.set $17 - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $17 - return - end - local.get $radix - i32.const 10 - i32.eq - if - local.get $value - global.get $~lib/builtins/u32.MAX_VALUE - i64.extend_i32_u - i64.le_u - if - local.get $value - i32.wrap_i64 - local.set $val32 - local.get $val32 - call $~lib/util/number/decimalCount32 - local.set $decimals - global.get $~lib/memory/__stack_pointer - local.get $decimals - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer - local.get $val32 - local.set $num - local.get $decimals - local.set $offset - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer - local.get $num - local.get $offset - call $~lib/util/number/utoa32_dec_lut - else - local.get $value - call $~lib/util/number/decimalCount64High - local.set $decimals|8 - global.get $~lib/memory/__stack_pointer - local.get $decimals|8 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|9 - local.get $value - local.set $num|10 - local.get $decimals|8 - local.set $offset|11 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|9 - local.get $num|10 - local.get $offset|11 - call $~lib/util/number/utoa64_dec_lut - end - else - local.get $radix - i32.const 16 - i32.eq - if - i32.const 63 - local.get $value - i64.clz - i32.wrap_i64 - i32.sub - i32.const 2 - i32.shr_s - i32.const 1 - i32.add - local.set $decimals|12 - global.get $~lib/memory/__stack_pointer - local.get $decimals|12 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.set $buffer|13 - local.get $value - local.set $num|14 - local.get $decimals|12 - local.set $offset|15 - i32.const 0 - i32.const 1 - i32.ge_s - drop - local.get $buffer|13 - local.get $num|14 - local.get $offset|15 - call $~lib/util/number/utoa_hex_lut - else - local.get $value - local.get $radix - call $~lib/util/number/ulog_base - local.set $decimals|16 - global.get $~lib/memory/__stack_pointer - local.get $decimals|16 - i32.const 1 - i32.shl - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $out - i32.store - local.get $out - local.get $value - local.get $decimals|16 - local.get $radix - call $~lib/util/number/utoa64_any_core - end - end - local.get $out - local.set $17 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>f32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>f64>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $17 - return ) - (func $~lib/util/number/dtoa (param $value f32) (result i32) - (local $value|1 f64) - (local $isSingle i32) - (local $size i32) - (local $result i32) - (local $5 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92723,75 +94105,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $~lib/util/number/dtoa_impl|inlined.0 (result i32) - local.get $value - f64.promote_f32 - local.set $value|1 - i32.const 1 - local.set $isSingle - local.get $value|1 - f64.const 0 - f64.eq - if - i32.const 8640 - br $~lib/util/number/dtoa_impl|inlined.0 - end - local.get $value|1 - local.get $value|1 - f64.sub - f64.const 0 - f64.eq - i32.eqz - if - local.get $value|1 - local.get $value|1 - f64.ne - if - i32.const 8672 - br $~lib/util/number/dtoa_impl|inlined.0 - end - i32.const 8704 - i32.const 8752 - local.get $value|1 - f64.const 0 - f64.lt - select - br $~lib/util/number/dtoa_impl|inlined.0 - end - i32.const 8784 - local.get $value|1 - local.get $isSingle - call $~lib/util/number/dtoa_core - i32.const 1 - i32.shl - local.set $size - global.get $~lib/memory/__stack_pointer - local.get $size - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result - i32.store - local.get $result - i32.const 8784 - local.get $size - memory.copy - local.get $result - br $~lib/util/number/dtoa_impl|inlined.0 - end - local.set $5 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 - return ) - (func $~lib/util/number/dtoa (param $value f64) (result i32) - (local $value|1 f64) - (local $isSingle i32) - (local $size i32) - (local $result i32) - (local $5 i32) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92800,71 +94133,26 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $~lib/util/number/dtoa_impl|inlined.1 (result i32) - local.get $value - local.set $value|1 - i32.const 0 - local.set $isSingle - local.get $value|1 - f64.const 0 - f64.eq - if - i32.const 8640 - br $~lib/util/number/dtoa_impl|inlined.1 - end - local.get $value|1 - local.get $value|1 - f64.sub - f64.const 0 - f64.eq - i32.eqz - if - local.get $value|1 - local.get $value|1 - f64.ne - if - i32.const 8672 - br $~lib/util/number/dtoa_impl|inlined.1 - end - i32.const 8704 - i32.const 8752 - local.get $value|1 - f64.const 0 - f64.lt - select - br $~lib/util/number/dtoa_impl|inlined.1 - end - i32.const 8784 - local.get $value|1 - local.get $isSingle - call $~lib/util/number/dtoa_core - i32.const 1 - i32.shl - local.set $size - global.get $~lib/memory/__stack_pointer - local.get $size - i32.const 2 - call $~lib/rt/itcms/__new - local.tee $result - i32.store - local.get $result - i32.const 8784 - local.get $size - memory.copy - local.get $result - br $~lib/util/number/dtoa_impl|inlined.1 - end - local.set $5 + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 - return ) - (func $~lib/arraybuffer/ArrayBuffer#constructor (param $this i32) (param $length i32) (result i32) - (local $buffer i32) - (local $3 i32) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -92873,1780 +94161,962 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - local.get $length - i32.const 1073741820 - i32.gt_u - if - i32.const 32 - i32.const 80 - i32.const 52 - i32.const 43 - call $~lib/builtins/abort - unreachable - end + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $length - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $buffer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 i32.store i32.const 2 - global.get $~lib/shared/runtime/Runtime.Incremental + global.get $~lib/shared/runtime/Runtime.Memory i32.ne drop - local.get $buffer - local.set $3 + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 0 - i32.shl + local.get $2 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load8_s - local.get $ptr - local.get $j - i32.const 1 + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.shl + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load8_s + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>bool>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_s offset=1 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_s - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_s - local.set $tmp - local.get $ptr - local.get $i - i32.const 0 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 0 - i32.shl - i32.add - i32.load8_s - i32.store8 - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 0 - i32.shl - i32.add - local.get $tmp - i32.store8 - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_s offset=1 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_s - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i8%2Ci32%2C~lib/typedarray/Int8Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.get $ptr - local.get $j - i32.const 1 + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.shl - i32.add - i32.load8_u + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) - i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_u offset=1 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_u - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 0 - i32.shl - i32.add - i32.load8_u - local.set $tmp - local.get $ptr - local.get $i - i32.const 0 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 0 - i32.shl - i32.add - i32.load8_u - i32.store8 - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 0 - i32.shl - i32.add - local.get $tmp - i32.store8 - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_u offset=1 - local.get $ptr - local.get $j - i32.const 0 - i32.shl - i32.add - i32.load8_u - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Ci32%2C~lib/typedarray/Uint8ClampedArray%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 1 - i32.shl + local.get $2 + call $~lib/function/Function<%28i16%2Ci32%2C~lib/typedarray/Int16Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load16_s - local.get $ptr - local.get $j - i32.const 1 + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u16%2Ci32%2C~lib/typedarray/Uint16Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j - i32.const 1 - i32.shl + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%2C~lib/typedarray/Int32Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load16_s + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u32%2Ci32%2C~lib/typedarray/Uint32Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_s offset=2 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_s - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 1 - i32.shl - i32.add - i32.load16_s - local.set $tmp - local.get $ptr - local.get $i - i32.const 1 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 1 - i32.shl - i32.add - i32.load16_s - i32.store16 - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 1 - i32.shl - i32.add - local.get $tmp - i32.store16 - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_s offset=2 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_s - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i64%2Ci32%2C~lib/typedarray/Int64Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 1 - i32.shl + local.get $2 + call $~lib/function/Function<%28u64%2Ci32%2C~lib/typedarray/Uint64Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load16_u - local.get $ptr - local.get $j - i32.const 1 + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f32%2Ci32%2C~lib/typedarray/Float32Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j - i32.const 1 - i32.shl + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f64%2Ci32%2C~lib/typedarray/Float64Array%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load16_u + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_u offset=2 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_u - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 1 - i32.shl - i32.add - i32.load16_u - local.set $tmp - local.get $ptr - local.get $i - i32.const 1 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 1 - i32.shl - i32.add - i32.load16_u - i32.store16 - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 1 - i32.shl - i32.add - local.get $tmp - i32.store16 - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_u offset=2 - local.get $ptr - local.get $j - i32.const 1 - i32.shl - i32.add - i32.load16_u - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j i32.const 2 - i32.shl - i32.add - i32.load - local.get $ptr - local.get $j - i32.const 1 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - i32.shl + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - i32.load - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - i32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i32) - (local $9 i32) - (local $10 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j i32.const 2 - i32.shl - i32.add - i32.load - local.get $ptr - local.get $j - i32.const 1 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - i32.shl + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i32.load + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $0) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $0) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - i32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - i32.load - i32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - i32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - i32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $0) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i64) - (local $9 i32) - (local $10 i32) + (func $~lib/array/Array#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 0 + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 3 - i32.shl + local.get $2 + call $~lib/array/Array#get:buffer + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i64.load + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i8%2Ci8%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $8) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i8%2Ci8%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u8%2Cu8%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $8) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - i64.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - i64.load - i64.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - local.get $tmp - i64.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $8) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u8%2Cu8%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i16%2Ci16%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i16%2Ci16%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp i64) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28u16%2Cu16%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 + local.get $2 i32.store - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - local.get $ptr - local.get $j - i32.const 1 - i32.add - local.tee $j - i32.const 3 - i32.shl + local.get $2 + call $~lib/function/Function<%28u16%2Cu16%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - i64.load - i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $8) + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i32%2Ci32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $8) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - i64.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 3 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - i64.load - i64.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 3 - i32.shl - i32.add - local.get $tmp - i64.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load offset=8 - local.get $ptr - local.get $j - i32.const 3 - i32.shl - i32.add - i64.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $8) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i32%2Ci32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) - (func $~lib/util/sort/extendRunRight (param $ptr i32) (param $i i32) (param $right i32) (param $comparator i32) (result i32) - (local $j i32) - (local $5 i32) - (local $6 i32) - (local $k i32) - (local $tmp f32) - (local $9 i32) - (local $10 i32) + (func $~lib/function/Function<%28u32%2Cu32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 4 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store - global.get $~lib/memory/__stack_pointer i32.const 0 - i32.store offset=8 - local.get $i - local.get $right - i32.eq - if - local.get $i - local.set $10 - global.get $~lib/memory/__stack_pointer - i32.const 12 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $10 - return - end - local.get $i - local.set $j - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $5 i32.store - local.get $ptr - local.get $j i32.const 2 - i32.shl - i32.add - f32.load - local.get $ptr - local.get $j - i32.const 1 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u32%2Cu32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - local.tee $j + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28i64%2Ci64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - i32.shl + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28i64%2Ci64%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add - f32.load + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28u64%2Cu64%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store i32.const 2 - global.set $~argumentsLength - local.get $5 - i32.load - call_indirect (type $13) + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28u64%2Cu64%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/function/Function<%28f32%2Cf32%29=>i32>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.gt_s - if - loop $while-continue|0 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $6 - i32.store offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load - i32.const 2 - global.set $~argumentsLength - local.get $6 - i32.load - call_indirect (type $13) - i32.const 31 - i32.shr_u - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|0 - end - end - local.get $j - local.set $k - loop $while-continue|1 - local.get $i - local.get $k - i32.lt_s - if - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - f32.load - local.set $tmp - local.get $ptr - local.get $i - i32.const 2 - i32.shl - i32.add - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - f32.load - f32.store - local.get $i - i32.const 1 - i32.add - local.set $i - local.get $ptr - local.get $k - i32.const 2 - i32.shl - i32.add - local.get $tmp - f32.store - local.get $k - i32.const 1 - i32.sub - local.set $k - br $while-continue|1 - end - end - else - loop $while-continue|2 - local.get $j - local.get $right - i32.lt_s - if (result i32) - global.get $~lib/memory/__stack_pointer - local.get $comparator - local.tee $9 - i32.store offset=8 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load offset=4 - local.get $ptr - local.get $j - i32.const 2 - i32.shl - i32.add - f32.load - i32.const 2 - global.set $~argumentsLength - local.get $9 - i32.load - call_indirect (type $13) - i32.const 0 - i32.ge_s - else - i32.const 0 - end - if - local.get $j - i32.const 1 - i32.add - local.set $j - br $while-continue|2 - end - end - end - local.get $j - local.set $10 + i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + local.get $this + local.set $2 global.get $~lib/memory/__stack_pointer - i32.const 12 + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28f32%2Cf32%29=>i32>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit + global.get $~lib/memory/__stack_pointer + i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 - return ) ) diff --git a/tests/compiler/std/typedarray.release.wat b/tests/compiler/std/typedarray.release.wat index c05cdc426a..1df8dbef50 100644 --- a/tests/compiler/std/typedarray.release.wat +++ b/tests/compiler/std/typedarray.release.wat @@ -17,9 +17,9 @@ (type $15 (func (param i32 i32 i32 i32 i32 i32))) (type $16 (func (param i32 i32) (result i64))) (type $17 (func (param i64 i64 i32 i32) (result i64))) - (type $18 (func (param i32 i64 i32) (result i32))) - (type $19 (func (param i32 i64) (result i32))) - (type $20 (func (param i32 i32 i32 i32))) + (type $18 (func (param i32 i32 i32 i32))) + (type $19 (func (param i32 i64 i32) (result i32))) + (type $20 (func (param i32 i64) (result i32))) (type $21 (func (param i32 i32 i64))) (type $22 (func (param i32 i32) (result f64))) (type $23 (func (param i32 i32) (result f32))) @@ -41,8 +41,8 @@ (type $39 (func (param i32 i64 i32))) (type $40 (func (result i32))) (type $41 (func (param i32 i64 i64 i32 i64 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -676,6 +676,41 @@ (elem $0 (i32.const 1) $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1" $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1" $"std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Int8Array,i8>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Uint8Array,u8>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Int16Array,i16>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Uint16Array,u16>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Int32Array,i32>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Uint32Array,u32>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Int64Array,i64>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Uint64Array,u64>~anonymous|0" $~lib/util/sort/COMPARATOR~anonymous|0 $"std/typedarray/testArraySort<~lib/typedarray/Float32Array,f32>~anonymous|0" $"std/typedarray/testArraySort<~lib/typedarray/Float64Array,f64>~anonymous|0") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 16320 + i32.lt_s + if + i32.const 49120 + i32.const 49168 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -816,7 +851,7 @@ if i32.const 1360 i32.const 1760 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -865,7 +900,7 @@ if i32.const 1360 i32.const 1632 - i32.const 178 + i32.const 179 i32.const 45 call $~lib/builtins/abort unreachable @@ -946,7 +981,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1031 + i32.const 1032 i32.const 64 call $~lib/builtins/abort unreachable @@ -998,7 +1033,7 @@ if i32.const 1360 i32.const 1632 - i32.const 463 + i32.const 464 i32.const 64 call $~lib/builtins/abort unreachable @@ -1201,7 +1236,7 @@ if i32.const 1360 i32.const 1632 - i32.const 747 + i32.const 748 i32.const 64 call $~lib/builtins/abort unreachable @@ -1287,7 +1322,7 @@ if i32.const 1360 i32.const 1632 - i32.const 36 + i32.const 37 i32.const 45 call $~lib/builtins/abort unreachable @@ -1368,7 +1403,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1457 + i32.const 1458 i32.const 64 call $~lib/builtins/abort unreachable @@ -1420,7 +1455,7 @@ if i32.const 1360 i32.const 1632 - i32.const 889 + i32.const 890 i32.const 64 call $~lib/builtins/abort unreachable @@ -1472,7 +1507,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1315 + i32.const 1316 i32.const 64 call $~lib/builtins/abort unreachable @@ -1522,7 +1557,7 @@ if i32.const 1360 i32.const 1632 - i32.const 320 + i32.const 321 i32.const 45 call $~lib/builtins/abort unreachable @@ -1638,7 +1673,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1173 + i32.const 1174 i32.const 64 call $~lib/builtins/abort unreachable @@ -1690,7 +1725,7 @@ if i32.const 1360 i32.const 1632 - i32.const 605 + i32.const 606 i32.const 64 call $~lib/builtins/abort unreachable @@ -1957,7 +1992,7 @@ if i32.const 1360 i32.const 1632 - i32.const 736 + i32.const 737 i32.const 64 call $~lib/builtins/abort unreachable @@ -2048,7 +2083,7 @@ if i32.const 1360 i32.const 1632 - i32.const 25 + i32.const 26 i32.const 45 call $~lib/builtins/abort unreachable @@ -2098,7 +2133,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1446 + i32.const 1447 i32.const 64 call $~lib/builtins/abort unreachable @@ -2147,7 +2182,7 @@ if i32.const 1360 i32.const 1632 - i32.const 309 + i32.const 310 i32.const 45 call $~lib/builtins/abort unreachable @@ -2278,7 +2313,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$714 + block $__inlined_func$~lib/util/string/compareImpl$699 loop $while-continue|1 local.get $0 local.tee $3 @@ -2298,7 +2333,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$714 + br_if $__inlined_func$~lib/util/string/compareImpl$699 local.get $2 i32.const 2 i32.add @@ -2860,7 +2895,7 @@ if i32.const 1360 i32.const 1632 - i32.const 167 + i32.const 168 i32.const 45 call $~lib/builtins/abort unreachable @@ -2910,7 +2945,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1162 + i32.const 1163 i32.const 64 call $~lib/builtins/abort unreachable @@ -3003,7 +3038,7 @@ if i32.const 1360 i32.const 1632 - i32.const 878 + i32.const 879 i32.const 64 call $~lib/builtins/abort unreachable @@ -3054,7 +3089,7 @@ if i32.const 1360 i32.const 1632 - i32.const 594 + i32.const 595 i32.const 64 call $~lib/builtins/abort unreachable @@ -3106,7 +3141,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1020 + i32.const 1021 i32.const 64 call $~lib/builtins/abort unreachable @@ -3157,7 +3192,7 @@ if i32.const 1360 i32.const 1632 - i32.const 452 + i32.const 453 i32.const 64 call $~lib/builtins/abort unreachable @@ -3209,7 +3244,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1304 + i32.const 1305 i32.const 64 call $~lib/builtins/abort unreachable @@ -5611,7 +5646,7 @@ if i32.const 1360 i32.const 1760 - i32.const 114 + i32.const 116 i32.const 42 call $~lib/builtins/abort unreachable @@ -8268,7 +8303,7 @@ i32.lt_s select local.set $0 - block $__inlined_func$~lib/util/bytes/FILL$202 + block $__inlined_func$~lib/util/bytes/FILL$187 local.get $1 i32.eqz local.get $1 @@ -8293,7 +8328,7 @@ i32.shl memory.fill end - br $__inlined_func$~lib/util/bytes/FILL$202 + br $__inlined_func$~lib/util/bytes/FILL$187 end loop $for-loop|0 local.get $0 @@ -10768,7 +10803,7 @@ if i32.const 1360 i32.const 1632 - i32.const 332 + i32.const 333 i32.const 33 call $~lib/builtins/abort unreachable @@ -10851,7 +10886,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1860 + i32.const 1867 i32.const 5 call $~lib/builtins/abort unreachable @@ -10870,7 +10905,7 @@ else i32.const 1056 i32.const 1632 - i32.const 1869 + i32.const 1876 i32.const 7 call $~lib/builtins/abort unreachable @@ -10885,7 +10920,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1874 + i32.const 1881 i32.const 7 call $~lib/builtins/abort unreachable @@ -10974,7 +11009,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1419 + block $__inlined_func$~lib/util/string/joinIntegerArray$1420 local.get $0 i32.const 1 i32.sub @@ -10988,7 +11023,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1419 + br $__inlined_func$~lib/util/string/joinIntegerArray$1420 end local.get $6 i32.eqz @@ -11001,7 +11036,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1419 + br $__inlined_func$~lib/util/string/joinIntegerArray$1420 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -11094,7 +11129,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1419 + br $__inlined_func$~lib/util/string/joinIntegerArray$1420 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -11154,7 +11189,7 @@ if i32.const 1360 i32.const 1632 - i32.const 190 + i32.const 191 i32.const 33 call $~lib/builtins/abort unreachable @@ -11214,7 +11249,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1185 + i32.const 1186 i32.const 33 call $~lib/builtins/abort unreachable @@ -11275,7 +11310,7 @@ if i32.const 1360 i32.const 1632 - i32.const 901 + i32.const 902 i32.const 33 call $~lib/builtins/abort unreachable @@ -11336,7 +11371,7 @@ if i32.const 1360 i32.const 1632 - i32.const 617 + i32.const 618 i32.const 33 call $~lib/builtins/abort unreachable @@ -11401,7 +11436,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -11512,7 +11547,7 @@ if i32.const 1360 i32.const 1632 - i32.const 48 + i32.const 49 i32.const 33 call $~lib/builtins/abort unreachable @@ -11572,7 +11607,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1043 + i32.const 1044 i32.const 33 call $~lib/builtins/abort unreachable @@ -11759,7 +11794,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -11878,7 +11913,7 @@ if i32.const 1360 i32.const 1632 - i32.const 759 + i32.const 760 i32.const 33 call $~lib/builtins/abort unreachable @@ -11939,7 +11974,7 @@ if i32.const 1360 i32.const 1632 - i32.const 475 + i32.const 476 i32.const 33 call $~lib/builtins/abort unreachable @@ -12123,7 +12158,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1469 + i32.const 1470 i32.const 33 call $~lib/builtins/abort unreachable @@ -12185,7 +12220,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1327 + i32.const 1328 i32.const 33 call $~lib/builtins/abort unreachable @@ -12620,7 +12655,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$1413 + block $__inlined_func$~lib/rt/itcms/Object#unlink$1414 local.get $0 i32.load offset=4 i32.const -4 @@ -12644,7 +12679,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$1413 + br $__inlined_func$~lib/rt/itcms/Object#unlink$1414 end local.get $0 i32.load offset=8 @@ -12687,7 +12722,7 @@ if i32.const 1360 i32.const 1424 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -16854,7 +16889,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -16974,7 +17009,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -18301,7 +18336,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1423 + block $__inlined_func$~lib/util/string/joinIntegerArray$1424 local.get $0 i32.const 1 i32.sub @@ -18315,7 +18350,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1423 + br $__inlined_func$~lib/util/string/joinIntegerArray$1424 end local.get $6 i32.eqz @@ -18328,7 +18363,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1423 + br $__inlined_func$~lib/util/string/joinIntegerArray$1424 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -18425,7 +18460,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1423 + br $__inlined_func$~lib/util/string/joinIntegerArray$1424 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -19024,7 +19059,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1421 + block $__inlined_func$~lib/util/string/joinIntegerArray$1422 local.get $0 i32.const 1 i32.sub @@ -19038,7 +19073,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1421 + br $__inlined_func$~lib/util/string/joinIntegerArray$1422 end local.get $6 i32.eqz @@ -19051,7 +19086,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1421 + br $__inlined_func$~lib/util/string/joinIntegerArray$1422 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -19148,7 +19183,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1421 + br $__inlined_func$~lib/util/string/joinIntegerArray$1422 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -19641,7 +19676,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -19737,7 +19772,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -19832,7 +19867,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -19903,7 +19938,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -19994,7 +20029,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1418 + block $__inlined_func$~lib/util/string/joinIntegerArray$1419 local.get $0 i32.const 1 i32.sub @@ -20008,7 +20043,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1418 + br $__inlined_func$~lib/util/string/joinIntegerArray$1419 end local.get $6 i32.eqz @@ -20021,7 +20056,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1418 + br $__inlined_func$~lib/util/string/joinIntegerArray$1419 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -20114,7 +20149,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1418 + br $__inlined_func$~lib/util/string/joinIntegerArray$1419 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -20674,7 +20709,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -20767,7 +20802,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -20841,7 +20876,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -20940,7 +20975,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -21035,7 +21070,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -21129,7 +21164,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$5 + block $__inlined_func$~lib/util/string/joinIntegerArray$3 local.get $0 i32.const 1 i32.sub @@ -21143,7 +21178,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$5 + br $__inlined_func$~lib/util/string/joinIntegerArray$3 end block $folding-inner0 local.get $6 @@ -21435,7 +21470,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$5 + br $__inlined_func$~lib/util/string/joinIntegerArray$3 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -21929,7 +21964,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -22023,7 +22058,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -22121,7 +22156,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -22220,7 +22255,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -22313,7 +22348,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1422 + block $__inlined_func$~lib/util/string/joinIntegerArray$1423 local.get $0 i32.const 1 i32.sub @@ -22327,7 +22362,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1422 + br $__inlined_func$~lib/util/string/joinIntegerArray$1423 end local.get $6 i32.eqz @@ -22340,7 +22375,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1422 + br $__inlined_func$~lib/util/string/joinIntegerArray$1423 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -22437,7 +22472,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1422 + br $__inlined_func$~lib/util/string/joinIntegerArray$1423 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -23037,7 +23072,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -23131,7 +23166,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -23228,7 +23263,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -23303,7 +23338,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -23398,7 +23433,7 @@ if i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -23491,7 +23526,7 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store - block $__inlined_func$~lib/util/string/joinIntegerArray$1420 + block $__inlined_func$~lib/util/string/joinIntegerArray$1421 local.get $0 i32.const 1 i32.sub @@ -23505,7 +23540,7 @@ global.set $~lib/memory/__stack_pointer i32.const 7776 local.set $0 - br $__inlined_func$~lib/util/string/joinIntegerArray$1420 + br $__inlined_func$~lib/util/string/joinIntegerArray$1421 end local.get $6 i32.eqz @@ -23518,7 +23553,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1420 + br $__inlined_func$~lib/util/string/joinIntegerArray$1421 end global.get $~lib/memory/__stack_pointer i32.const 9584 @@ -23615,7 +23650,7 @@ i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - br $__inlined_func$~lib/util/string/joinIntegerArray$1420 + br $__inlined_func$~lib/util/string/joinIntegerArray$1421 end global.get $~lib/memory/__stack_pointer i32.const 8 @@ -26452,7 +26487,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store - block $__inlined_func$~lib/util/number/utoa64$749 + block $__inlined_func$~lib/util/number/utoa64$734 local.get $3 i64.eqz if @@ -26462,7 +26497,7 @@ global.set $~lib/memory/__stack_pointer i32.const 8000 local.set $1 - br $__inlined_func$~lib/util/number/utoa64$749 + br $__inlined_func$~lib/util/number/utoa64$734 end local.get $3 i64.const 4294967295 @@ -32972,7 +33007,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -33409,7 +33444,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -33850,7 +33885,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -34294,7 +34329,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -34735,7 +34770,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -35172,7 +35207,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -35613,7 +35648,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -36057,7 +36092,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -36498,7 +36533,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -37198,7 +37233,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -37822,7 +37857,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable @@ -38186,7 +38221,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -38410,7 +38445,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -38636,7 +38671,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -39077,7 +39112,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -39301,7 +39336,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -39526,7 +39561,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -39752,7 +39787,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -39978,7 +40013,7 @@ if i32.const 1056 i32.const 1632 - i32.const 1865 + i32.const 1872 i32.const 9 call $~lib/builtins/abort unreachable @@ -68704,7 +68739,7 @@ end i32.const 1360 i32.const 1632 - i32.const 1902 + i32.const 1911 i32.const 5 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/uri.debug.wat b/tests/compiler/std/uri.debug.wat index 3351c851af..1bca02f554 100644 --- a/tests/compiler/std/uri.debug.wat +++ b/tests/compiler/std/uri.debug.wat @@ -5,16 +5,18 @@ (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) (type $10 (func (param i32 i32 i32 i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/util/uri/URL_UNSAFE i32 (i32.const 44)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -301,7 +303,7 @@ if i32.const 352 i32.const 416 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3406,55 +3408,6 @@ i32.const 0 drop ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 352 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 160 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 560 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - unreachable - ) (func $~start call $start:std/uri ) @@ -3471,6 +3424,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/uri/encodeURIComponent (param $str i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -4614,4 +4599,53 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 352 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 160 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 560 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/std/uri.release.wat b/tests/compiler/std/uri.release.wat index e69563783a..2383939247 100644 --- a/tests/compiler/std/uri.release.wat +++ b/tests/compiler/std/uri.release.wat @@ -2,13 +2,13 @@ (type $0 (func (param i32 i32) (result i32))) (type $1 (func (param i32) (result i32))) (type $2 (func)) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) + (type $6 (func (param i32 i32 i32) (result i32))) (type $7 (func (result i32))) (type $8 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -153,6 +153,41 @@ (data $66 (i32.const 4336) "\04\00\00\00 \00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 4356 + i32.lt_s + if + i32.const 37152 + i32.const 37200 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -497,7 +532,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$132 + block $__inlined_func$~lib/rt/itcms/Object#unlink$133 local.get $1 i32.load offset=4 i32.const -4 @@ -521,7 +556,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$132 + br $__inlined_func$~lib/rt/itcms/Object#unlink$133 end local.get $1 i32.load offset=8 @@ -564,7 +599,7 @@ if i32.const 1376 i32.const 1440 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/super-inline.debug.wat b/tests/compiler/super-inline.debug.wat index dc1722f0ec..4249369e9d 100644 --- a/tests/compiler/super-inline.debug.wat +++ b/tests/compiler/super-inline.debug.wat @@ -4,11 +4,12 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) (type $7 (func (param i32 i32 i64) (result i32))) (type $8 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -20,6 +21,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -226,7 +228,7 @@ if i32.const 224 i32.const 288 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2272,72 +2274,6 @@ local.get $0 call $super-inline/Foo#a ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $super-inline/foo - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $super-inline/bar - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 224 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 32 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $super-inline/Bar - block $super-inline/Foo - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $super-inline/Foo $super-inline/Bar $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:super-inline ) @@ -2354,6 +2290,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $super-inline/Foo#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -2539,4 +2507,70 @@ local.get $2 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $super-inline/foo + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $super-inline/bar + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 224 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 32 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $super-inline/Bar + block $super-inline/Foo + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $super-inline/Foo $super-inline/Bar $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/super-inline.release.wat b/tests/compiler/super-inline.release.wat index d1ffdaa805..d993f6e7e4 100644 --- a/tests/compiler/super-inline.release.wat +++ b/tests/compiler/super-inline.release.wat @@ -2,11 +2,11 @@ (type $0 (func (param i32))) (type $1 (func (param i32) (result i32))) (type $2 (func)) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32))) (type $5 (func (param i32 i32 i64))) (type $6 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $8 (i32.const 1440) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1468 + i32.lt_s + if + i32.const 34256 + i32.const 34304 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/__visit (param $0 i32) (local $1 i32) (local $2 i32) @@ -72,7 +107,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$116 + block $__inlined_func$~lib/rt/itcms/Object#unlink$117 local.get $1 i32.load offset=4 i32.const -4 @@ -96,7 +131,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$116 + br $__inlined_func$~lib/rt/itcms/Object#unlink$117 end local.get $1 i32.load offset=8 @@ -139,7 +174,7 @@ if i32.const 1248 i32.const 1312 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/switch.debug.wat b/tests/compiler/switch.debug.wat index dea9957b59..bb8b8bedc1 100644 --- a/tests/compiler/switch.debug.wat +++ b/tests/compiler/switch.debug.wat @@ -4,17 +4,19 @@ (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32))) (type $4 (func)) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i64) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i64) (result i32))) (type $8 (func (param i32 i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) (type $11 (func (param f32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -552,7 +554,7 @@ if i32.const 496 i32.const 560 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2806,72 +2808,6 @@ local.get $value i32.store ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $switch/foo1 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $switch/foo2 - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 496 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 304 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $switch/BarClass - block $switch/FooClass - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $switch/FooClass $switch/BarClass $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - return - end - unreachable - ) (func $~start call $start:switch ) @@ -2888,6 +2824,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $left i32) (param $right i32) (result i32) (local $leftLength i32) (local $3 i32) @@ -4967,4 +4935,70 @@ local.get $2 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $switch/foo1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $switch/foo2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 496 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 304 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $switch/BarClass + block $switch/FooClass + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $switch/FooClass $switch/BarClass $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/switch.release.wat b/tests/compiler/switch.release.wat index 9b967b3838..a63a3e7678 100644 --- a/tests/compiler/switch.release.wat +++ b/tests/compiler/switch.release.wat @@ -2,12 +2,12 @@ (type $0 (func (param i32) (result i32))) (type $1 (func (param i32 i32) (result i32))) (type $2 (func)) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32))) + (type $5 (func (param i32 i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -65,6 +65,41 @@ (data $23 (i32.const 1936) "\06\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 \00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1964 + i32.lt_s + if + i32.const 34752 + i32.const 34800 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -112,7 +147,7 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store - block $__inlined_func$~lib/string/String#concat$191 + block $__inlined_func$~lib/string/String#concat$192 local.get $1 i32.const 20 i32.sub @@ -131,7 +166,7 @@ global.set $~lib/memory/__stack_pointer i32.const 1296 local.set $0 - br $__inlined_func$~lib/string/String#concat$191 + br $__inlined_func$~lib/string/String#concat$192 end global.get $~lib/memory/__stack_pointer local.get $0 @@ -535,7 +570,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$186 + block $__inlined_func$~lib/rt/itcms/Object#unlink$187 local.get $1 i32.load offset=4 i32.const -4 @@ -559,7 +594,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$186 + br $__inlined_func$~lib/rt/itcms/Object#unlink$187 end local.get $1 i32.load offset=8 @@ -602,7 +637,7 @@ if i32.const 1520 i32.const 1584 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/tablebase.debug.wat b/tests/compiler/tablebase.debug.wat index be867f2190..1c2a118d56 100644 --- a/tests/compiler/tablebase.debug.wat +++ b/tests/compiler/tablebase.debug.wat @@ -1,10 +1,11 @@ (module (type $0 (func)) - (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32) (result i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $tablebase/staticFunction i32 (i32.const 32)) (global $~lib/native/ASC_TABLE_BASE i32 (i32.const 32)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 92)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32860)) (global $~lib/memory/__heap_base i32 (i32.const 32860)) @@ -38,6 +39,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $start:tablebase (local $0 i32) global.get $~lib/memory/__stack_pointer diff --git a/tests/compiler/tablebase.release.wat b/tests/compiler/tablebase.release.wat index 6ed678709b..7954a5da97 100644 --- a/tests/compiler/tablebase.release.wat +++ b/tests/compiler/tablebase.release.wat @@ -1,7 +1,8 @@ (module - (type $0 (func (param i32 i32 i32 i32))) + (type $0 (func (param i32 i32 i32))) (type $1 (func)) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33884)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -10,6 +11,40 @@ (data $1.1 (i32.const 1080) "\02\00\00\00\18\00\00\00t\00a\00b\00l\00e\00b\00a\00s\00e\00.\00t\00s") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1116 + i32.lt_s + if + i32.const 33904 + i32.const 33952 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~start global.get $~lib/memory/__stack_pointer i32.const 4 @@ -22,7 +57,6 @@ i32.const 33904 i32.const 33952 i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -40,7 +74,6 @@ i32.const 0 i32.const 1088 i32.const 6 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/templateliteral.debug.wat b/tests/compiler/templateliteral.debug.wat index ace4b98b35..1d3229df00 100644 --- a/tests/compiler/templateliteral.debug.wat +++ b/tests/compiler/templateliteral.debug.wat @@ -6,8 +6,8 @@ (type $4 (func (param i32))) (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $8 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32))) + (type $8 (func (param i32 i32 i32 i32 i32) (result i32))) (type $9 (func (param i32 i32 i64) (result i32))) (type $10 (func (result i32))) (type $11 (func (param i32 i64 i32))) @@ -17,11 +17,13 @@ (type $15 (func (param i32 f64 i32) (result i32))) (type $16 (func (param f64 i32) (result i32))) (type $17 (func (param f64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -33,6 +35,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0)) (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0)) (global $~lib/util/number/_exp (mut i32) (i32.const 0)) @@ -412,7 +415,7 @@ if i32.const 384 i32.const 448 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2510,6 +2513,10 @@ i32.store i32.const 1 drop + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this local.get $value i32.const 1 @@ -4376,132 +4383,6 @@ call $templateliteral/test_null call $templateliteral/test_recursive ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 384 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 192 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 1440 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 2496 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) - (local $cur i32) - (local $end i32) - (local $val i32) - i32.const 1 - drop - local.get $this - local.set $cur - local.get $cur - local.get $this - i32.const 20 - i32.sub - call $~lib/rt/common/OBJECT#get:rtSize - i32.add - local.set $end - loop $while-continue|0 - local.get $cur - local.get $end - i32.lt_u - if - local.get $cur - i32.load - local.set $val - local.get $val - if - local.get $val - local.get $cookie - call $~lib/rt/itcms/__visit - end - local.get $cur - i32.const 4 - i32.add - local.set $cur - br $while-continue|0 - end - end - ) - (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>#__visit - ) - (func $templateliteral/RecursiveObject~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - local.get $0 - i32.load offset=4 - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $templateliteral/RecursiveObject - block $templateliteral/Ref - block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray<~lib/string/String> $templateliteral/Ref $templateliteral/RecursiveObject $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray<~lib/string/String>~visit - return - end - return - end - local.get $0 - local.get $1 - call $templateliteral/RecursiveObject~visit - return - end - unreachable - ) (func $~start global.get $~started if @@ -4620,6 +4501,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String#concat (param $this i32) (param $other i32) (result i32) (local $thisSize i32) (local $otherSize i32) @@ -6451,4 +6364,134 @@ local.get $5 return ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 384 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 192 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 1440 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 2496 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $this i32) (param $cookie i32) + (local $cur i32) + (local $end i32) + (local $val i32) + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop + i32.const 1 + drop + local.get $this + local.set $cur + local.get $cur + local.get $this + i32.const 20 + i32.sub + call $~lib/rt/common/OBJECT#get:rtSize + i32.add + local.set $end + loop $while-continue|0 + local.get $cur + local.get $end + i32.lt_u + if + local.get $cur + i32.load + local.set $val + local.get $val + if + local.get $val + local.get $cookie + call $~lib/rt/itcms/__visit + end + local.get $cur + i32.const 4 + i32.add + local.set $cur + br $while-continue|0 + end + end + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>#__visit + ) + (func $templateliteral/RecursiveObject~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + local.get $0 + i32.load offset=4 + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $templateliteral/RecursiveObject + block $templateliteral/Ref + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/staticarray/StaticArray<~lib/string/String> $templateliteral/Ref $templateliteral/RecursiveObject $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>~visit + return + end + return + end + local.get $0 + local.get $1 + call $templateliteral/RecursiveObject~visit + return + end + unreachable + ) ) diff --git a/tests/compiler/templateliteral.release.wat b/tests/compiler/templateliteral.release.wat index e99c91217f..7054176b72 100644 --- a/tests/compiler/templateliteral.release.wat +++ b/tests/compiler/templateliteral.release.wat @@ -3,15 +3,15 @@ (type $1 (func (param i32) (result i32))) (type $2 (func)) (type $3 (func (param i32))) - (type $4 (func (param i32 i32 i32))) - (type $5 (func (param f64) (result i32))) - (type $6 (func (param i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $4 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32))) + (type $6 (func (param f64) (result i32))) + (type $7 (func (param i32 i32))) (type $8 (func (param i32 i32 i64))) (type $9 (func (param i32 i32 i32) (result i32))) (type $10 (func (param i64 i64 i32 i64 i32) (result i32))) (type $11 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -140,6 +140,41 @@ (data $62 (i32.const 5872) "\07\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00\04A\00\00 ") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 5904 + i32.lt_s + if + i32.const 38704 + i32.const 38752 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -253,7 +288,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$91 + block $__inlined_func$~lib/util/string/compareImpl$87 loop $while-continue|1 local.get $0 local.tee $3 @@ -273,7 +308,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$91 + br_if $__inlined_func$~lib/util/string/compareImpl$87 local.get $2 i32.const 2 i32.add @@ -1585,7 +1620,7 @@ local.get $1 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$165 + block $__inlined_func$~lib/rt/itcms/Object#unlink$166 local.get $0 i32.load offset=4 i32.const -4 @@ -1609,7 +1644,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$165 + br $__inlined_func$~lib/rt/itcms/Object#unlink$166 end local.get $0 i32.load offset=8 @@ -1652,7 +1687,7 @@ if i32.const 1408 i32.const 1472 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/ternary.debug.wat b/tests/compiler/ternary.debug.wat index 91a380b1f5..823185fd2f 100644 --- a/tests/compiler/ternary.debug.wat +++ b/tests/compiler/ternary.debug.wat @@ -1,15 +1,16 @@ (module (type $0 (func)) (type $1 (func (param i32 i32))) - (type $2 (func (param i32 i32 i32) (result i32))) - (type $3 (func (param i32))) - (type $4 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32) (result i32))) + (type $4 (func (param i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $ternary/a (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 44)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32812)) (global $~lib/memory/__heap_base i32 (i32.const 32812)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00a\00\00\00\00\00\00\00\00\00\00\00") (table $0 1 1 funcref) @@ -143,4 +144,36 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/ternary.release.wat b/tests/compiler/ternary.release.wat index 7d2cc0437a..384b544134 100644 --- a/tests/compiler/ternary.release.wat +++ b/tests/compiler/ternary.release.wat @@ -4,7 +4,7 @@ (type $2 (func (param i32))) (type $3 (func (param i32 i32 i32) (result i32))) (type $4 (func (param i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33836)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -14,6 +14,37 @@ (export "testDropWithTypeMismatch" (func $ternary/testDropWithTypeMismatch)) (export "memory" (memory $0)) (export "testVoidInclTypeMismatch" (func $export:ternary/testVoidInclTypeMismatch)) + (func $~lib/builtins/abort + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1068 + i32.lt_s + if + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 33856 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 33904 + i32.store offset=4 + i32.const 33856 + i32.const 33904 + i32.const 1 + i32.const 1 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $ternary/testDropWithTypeMismatch (param $0 i32) global.get $~lib/memory/__stack_pointer i32.const 4 @@ -23,10 +54,6 @@ i32.const 1068 i32.lt_s if - i32.const 33856 - i32.const 33904 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end @@ -57,10 +84,6 @@ i32.const 1068 i32.lt_s if - i32.const 33856 - i32.const 33904 - i32.const 1 - i32.const 1 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/throw-invalid-type.json b/tests/compiler/throw-invalid-type.json new file mode 100644 index 0000000000..54592b9eb2 --- /dev/null +++ b/tests/compiler/throw-invalid-type.json @@ -0,0 +1,9 @@ +{ + "asc_flags": [ + "--enable", "exception-handling" + ], + "stderr": [ + "AS250: Only Error or its subclasses can be thrown, but found type '~lib/string/String'.", + "EOF" + ] +} diff --git a/tests/compiler/throw-invalid-type.ts b/tests/compiler/throw-invalid-type.ts new file mode 100644 index 0000000000..03c168eea5 --- /dev/null +++ b/tests/compiler/throw-invalid-type.ts @@ -0,0 +1,6 @@ +// Test that throwing non-Error types results in a compile error + +// This should fail - throwing a string is not allowed +throw "string error"; + +ERROR("EOF"); diff --git a/tests/compiler/throw.debug.wat b/tests/compiler/throw.debug.wat index 0b8420d409..3127069b5c 100644 --- a/tests/compiler/throw.debug.wat +++ b/tests/compiler/throw.debug.wat @@ -7,7 +7,8 @@ (type $5 (func (param i32 i32 i32))) (type $6 (func (param i32 i32 i64) (result i32))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) @@ -17,6 +18,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) @@ -338,7 +340,7 @@ if i32.const 464 i32.const 528 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -1802,6 +1804,54 @@ call $~lib/builtins/abort unreachable ) + (func $~start + call $start:throw + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 33520 + i32.const 33568 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 464 @@ -1845,20 +1895,4 @@ end unreachable ) - (func $~start - call $start:throw - ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s - if - i32.const 33520 - i32.const 33568 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - ) ) diff --git a/tests/compiler/throw.release.wat b/tests/compiler/throw.release.wat index 7336e48213..fd5272e287 100644 --- a/tests/compiler/throw.release.wat +++ b/tests/compiler/throw.release.wat @@ -1,9 +1,9 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32 i32 i32 i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) @@ -45,6 +45,41 @@ (export "doThrow" (func $throw/doThrow)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1748 + i32.lt_s + if + i32.const 34544 + i32.const 34592 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/step (local $0 i32) (local $1 i32) @@ -500,7 +535,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$92 + block $__inlined_func$~lib/rt/itcms/Object#unlink$93 local.get $1 i32.load offset=4 i32.const -4 @@ -524,7 +559,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$92 + br $__inlined_func$~lib/rt/itcms/Object#unlink$93 end local.get $1 i32.load offset=8 @@ -567,7 +602,7 @@ if i32.const 1488 i32.const 1552 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/typealias.debug.wat b/tests/compiler/typealias.debug.wat index a32c177783..82070acc10 100644 --- a/tests/compiler/typealias.debug.wat +++ b/tests/compiler/typealias.debug.wat @@ -1,14 +1,16 @@ (module (type $0 (func)) (type $1 (func (param i32) (result i32))) - (type $2 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $3 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32 i32 i32 i32))) + (type $3 (func (param i32 i32 i32 i32 i32) (result i32))) (type $4 (func (param i32 i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $~lib/memory/__data_end i32 (i32.const 156)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 32924)) @@ -331,4 +333,36 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) ) diff --git a/tests/compiler/typealias.release.wat b/tests/compiler/typealias.release.wat index 19dc83cfe9..cb0a7d8b41 100644 --- a/tests/compiler/typealias.release.wat +++ b/tests/compiler/typealias.release.wat @@ -3,7 +3,7 @@ (type $1 (func (param i32 i32 i32 i32))) (type $2 (func (param i32 i32) (result i32))) (type $3 (func (param i32) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33948)) (memory $0 1) (data $0 (i32.const 1036) "\1c") @@ -19,6 +19,41 @@ (export "alias" (func $typealias/alias)) (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1180 + i32.lt_s + if + i32.const 33968 + i32.const 34016 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) diff --git a/tests/compiler/typeof.debug.wat b/tests/compiler/typeof.debug.wat index 5d02f023cd..afd2ddb981 100644 --- a/tests/compiler/typeof.debug.wat +++ b/tests/compiler/typeof.debug.wat @@ -4,16 +4,18 @@ (type $2 (func (param i32))) (type $3 (func)) (type $4 (func (param i32 i32) (result i32))) - (type $5 (func (param i32 i32 i32))) - (type $6 (func (param i32 i32 i32 i32 i32) (result i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $5 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32))) + (type $7 (func (param i32 i32 i32 i32 i32) (result i32))) (type $8 (func (param i32 i32 i64) (result i32))) (type $9 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $typeof/SomeNamespace.a i32 (i32.const 1)) (global $typeof/b (mut i32) (i32.const 1)) (global $typeof/i (mut i32) (i32.const 1)) @@ -39,6 +41,7 @@ (global $~lib/memory/__stack_pointer (mut i32) (i32.const 33564)) (global $~lib/memory/__heap_base i32 (i32.const 33564)) (global $~started (mut i32) (i32.const 0)) + (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) (memory $0 1) (data $0 (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\0c\00\00\00n\00u\00m\00b\00e\00r\00") (data $1 (i32.const 44) ",\00\00\00\00\00\00\00\00\00\00\00\02\00\00\00\12\00\00\00t\00y\00p\00e\00o\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00") @@ -364,7 +367,7 @@ if i32.const 528 i32.const 592 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -2384,87 +2387,6 @@ local.get $ptr return ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $typeof/s - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - global.get $typeof/c - local.tee $1 - if - local.get $1 - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 528 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 336 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) - local.get $this - i32.load offset=4 - ) - (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>#__visit - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $typeof/SomeClass - block $~lib/function/Function<%28%29=>void> - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $typeof/SomeClass $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - local.get $0 - local.get $1 - call $~lib/function/Function<%28%29=>void>~visit - return - end - return - end - unreachable - ) (func $~start global.get $~started if @@ -2583,6 +2505,38 @@ local.get $3 return ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $typeof/SomeClass#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3026,8 +2980,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) - (local $2 i32) + (func $~lib/object/Object#constructor (param $this i32) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3037,21 +2991,106 @@ i32.const 0 i32.store local.get $this - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store - local.get $2 - call $~lib/function/Function<%28%29=>void>#get:_env - local.get $cookie - call $~lib/rt/itcms/__visit + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.const 0 + call $~lib/rt/itcms/__new + local.tee $this + i32.store + end + local.get $this + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer + local.get $1 ) - (func $~lib/object/Object#constructor (param $this i32) (result i32) + (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + global.get $typeof/s + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $typeof/c + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 528 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 336 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/function/Function<%28%29=>void>#get:_env (param $this i32) (result i32) + local.get $this + i32.load offset=4 + ) + (func $~lib/function/Function<%28%29=>void>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>#__visit + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $typeof/SomeClass + block $~lib/function/Function<%28%29=>void> + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/function/Function<%28%29=>void> $typeof/SomeClass $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/function/Function<%28%29=>void>~visit + return + end + return + end + unreachable + ) + (func $~lib/function/Function<%28%29=>void>#__visit (param $this i32) (param $cookie i32) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -3060,22 +3099,22 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store + i32.const 2 + global.get $~lib/shared/runtime/Runtime.Memory + i32.ne + drop local.get $this - i32.eqz - if - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 0 - call $~lib/rt/itcms/__new - local.tee $this - i32.store - end - local.get $this - local.set $1 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + call $~lib/function/Function<%28%29=>void>#get:_env + local.get $cookie + call $~lib/rt/itcms/__visit global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 ) ) diff --git a/tests/compiler/typeof.release.wat b/tests/compiler/typeof.release.wat index f2e06714bf..1d0036d4cd 100644 --- a/tests/compiler/typeof.release.wat +++ b/tests/compiler/typeof.release.wat @@ -1,13 +1,13 @@ (module (type $0 (func)) - (type $1 (func (param i32))) - (type $2 (func (param i32 i32))) - (type $3 (func (param i32) (result i32))) - (type $4 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (param i32))) + (type $3 (func (param i32 i32))) + (type $4 (func (param i32) (result i32))) (type $5 (func (param i32 i32) (result i32))) (type $6 (func (param i32 i32 i64))) (type $7 (func (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -54,6 +54,41 @@ (data $17.1 (i32.const 1816) " ") (export "memory" (memory $0)) (export "_start" (func $~start)) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1820 + i32.lt_s + if + i32.const 34608 + i32.const 34656 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -167,7 +202,7 @@ end end end - block $__inlined_func$~lib/util/string/compareImpl$78 + block $__inlined_func$~lib/util/string/compareImpl$75 loop $while-continue|1 local.get $0 local.tee $3 @@ -187,7 +222,7 @@ local.get $4 local.get $5 i32.ne - br_if $__inlined_func$~lib/util/string/compareImpl$78 + br_if $__inlined_func$~lib/util/string/compareImpl$75 local.get $2 i32.const 2 i32.add @@ -254,7 +289,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$119 + block $__inlined_func$~lib/rt/itcms/Object#unlink$120 local.get $1 i32.load offset=4 i32.const -4 @@ -278,7 +313,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$119 + br $__inlined_func$~lib/rt/itcms/Object#unlink$120 end local.get $1 i32.load offset=8 @@ -321,7 +356,7 @@ if i32.const 1552 i32.const 1616 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/unary-errors.ts b/tests/compiler/unary-errors.ts index 4e42d032a7..60bcb94c6c 100644 --- a/tests/compiler/unary-errors.ts +++ b/tests/compiler/unary-errors.ts @@ -1,5 +1,4 @@ /* eslint-disable no-class-assign */ -/* eslint-disable no-global-assign */ class Foo {} namespace Bar {} diff --git a/tests/compiler/while.debug.wat b/tests/compiler/while.debug.wat index 9bb3b1cbbb..d4028ac631 100644 --- a/tests/compiler/while.debug.wat +++ b/tests/compiler/while.debug.wat @@ -5,11 +5,12 @@ (type $3 (func (param i32))) (type $4 (func (result i32))) (type $5 (func (param i32 i32) (result i32))) - (type $6 (func (param i32 i32 i32))) - (type $7 (func (param i32 i32 i32 i32))) + (type $6 (func (param i32 i32 i32 i32))) + (type $7 (func (param i32 i32 i32))) (type $8 (func (param i32 i32 i64) (result i32))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $while/ran (mut i32) (i32.const 0)) + (global $~lib/native/ASC_FEATURE_EXCEPTION_HANDLING i32 (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -21,6 +22,7 @@ (global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0)) (global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1)) (global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2)) + (global $~lib/shared/runtime/Runtime.Memory i32 (i32.const 3)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) @@ -647,7 +649,7 @@ if i32.const 272 i32.const 336 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable @@ -3153,55 +3155,6 @@ end call $~lib/rt/itcms/__collect ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - i32.const 272 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 - local.get $0 - call $~lib/rt/itcms/__visit - ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) - (local $2 i32) - local.get $0 - local.get $1 - call $~lib/object/Object~visit - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $while/Ref - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - block $~lib/object/Object - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $while/Ref $invalid - end - return - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return - end - unreachable - ) (func $~start call $start:while ) @@ -3218,6 +3171,38 @@ unreachable end ) + (func $~lib/builtins/abort (param $message i32) (param $fileName i32) (param $lineNumber i32) (param $columnNumber i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + drop + local.get $message + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $fileName + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store offset=4 + local.get $4 + local.get $lineNumber + local.get $columnNumber + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $while/Ref#constructor (param $this i32) (result i32) (local $1 i32) global.get $~lib/memory/__stack_pointer @@ -3284,4 +3269,53 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + i32.const 272 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 80 + local.get $0 + call $~lib/rt/itcms/__visit + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + local.get $1 + call $~lib/object/Object~visit + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/object/Object~visit (param $0 i32) (param $1 i32) + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $while/Ref + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + block $~lib/object/Object + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/object/Object $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $while/Ref $invalid + end + return + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + return + end + unreachable + ) ) diff --git a/tests/compiler/while.release.wat b/tests/compiler/while.release.wat index 90a58e5b7a..7578d83af3 100644 --- a/tests/compiler/while.release.wat +++ b/tests/compiler/while.release.wat @@ -1,12 +1,12 @@ (module (type $0 (func)) - (type $1 (func (result i32))) - (type $2 (func (param i32))) - (type $3 (func (param i32 i32))) - (type $4 (func (param i32) (result i32))) - (type $5 (func (param i32 i32 i32 i32))) + (type $1 (func (param i32 i32 i32 i32))) + (type $2 (func (result i32))) + (type $3 (func (param i32))) + (type $4 (func (param i32 i32))) + (type $5 (func (param i32) (result i32))) (type $6 (func (param i32 i32 i64))) - (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "abort" (func $~lib/builtins/__abort_impl (param i32 i32 i32 i32))) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -34,6 +34,41 @@ (data $9 (i32.const 1488) "\05\00\00\00 \00\00\00 \00\00\00 \00\00\00\00\00\00\00 ") (export "memory" (memory $0)) (start $~start) + (func $~lib/builtins/abort (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1512 + i32.lt_s + if + i32.const 34304 + i32.const 34352 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $2 + local.get $3 + call $~lib/builtins/__abort_impl + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/rt/itcms/step (result i32) (local $0 i32) (local $1 i32) @@ -332,7 +367,7 @@ local.get $0 global.set $~lib/rt/itcms/iter end - block $__inlined_func$~lib/rt/itcms/Object#unlink$128 + block $__inlined_func$~lib/rt/itcms/Object#unlink$129 local.get $1 i32.load offset=4 i32.const -4 @@ -356,7 +391,7 @@ call $~lib/builtins/abort unreachable end - br $__inlined_func$~lib/rt/itcms/Object#unlink$128 + br $__inlined_func$~lib/rt/itcms/Object#unlink$129 end local.get $1 i32.load offset=8 @@ -399,7 +434,7 @@ if i32.const 1296 i32.const 1360 - i32.const 21 + i32.const 22 i32.const 28 call $~lib/builtins/abort unreachable diff --git a/tests/data/data.spec.ts b/tests/data/data.spec.ts new file mode 100644 index 0000000000..d65ed96888 --- /dev/null +++ b/tests/data/data.spec.ts @@ -0,0 +1,224 @@ +// Exhaustive tests for the @data codec: the DataWriter/DataReader runtime +// (std/assembly/data.ts) and the compiler-generated encode/decode + toJSON/ +// fromJSON (src/parser.ts injectDataCodec). Run against toilscript via run.mjs. + +@data +class AllScalars { + a: u8 = 0; b: u16 = 0; c: u32 = 0; d: u64 = 0; + e: i8 = 0; f: i16 = 0; g: i32 = 0; h: i64 = 0; + p: f32 = 0; q: f64 = 0; r: bool = false; s: string = ""; +} + +@data +class AllBig { + a: u128 = u128.Zero; + b: i128 = i128.Zero; + c: u256 = u256.Zero; + d: i256 = i256.Zero; +} + +@data +class Inner { v: u64 = 0; s: string = ""; } + +@data +class Nested { id: u32 = 0; inner: Inner = new Inner(); tail: bool = false; } + +@data +class Bag { + nums: Array = []; + strs: Array = []; + flags: Array = []; + items: Array = []; +} + +function testWriterReader(): void { + const w = new DataWriter(); + w.writeU8(0x12); + w.writeU16(0x3456); + w.writeU32(0x789abcde); + w.writeU64(0x1122334455667788); + w.writeI8(-2); + w.writeI16(-300); + w.writeI32(-70000); + w.writeI64(-5000000000); + w.writeF32(1.5); + w.writeF64(-2.25); + w.writeBool(true); + w.writeString("héllo"); + w.writeU128(u128.fromU64(42)); + w.writeI128(i128.fromI64(-42)); + w.writeU256(u256.fromU64(99)); + const mb = new Uint8Array(2); mb[0] = 7; mb[1] = 9; + w.writeBytes(mb); + assert(w.length() > 0); + + const r = new DataReader(w.toBytes()); + assert(r.readU8() == 0x12); + assert(r.readU16() == 0x3456); + assert(r.readU32() == 0x789abcde); + assert(r.readU64() == 0x1122334455667788); + assert(r.readI8() == -2); + assert(r.readI16() == -300); + assert(r.readI32() == -70000); + assert(r.readI64() == -5000000000); + assert(r.readF32() == 1.5); + assert(r.readF64() == -2.25); + assert(r.readBool()); + assert(r.readString() == "héllo"); + assert(r.readU128() == u128.fromU64(42)); + assert(r.readI128() == i128.fromI64(-42)); + assert(r.readU256() == u256.fromU64(99)); + const b = r.readBytes(); + assert(b.length == 2 && b[0] == 7 && b[1] == 9); + assert(r.ok); + assert(r.remaining() == 0); + + // growth across many writes + empty string + i256 + const w2 = new DataWriter(1); + w2.writeString(""); + w2.writeI256(i256.Zero); + for (let i = 0; i < 300; i++) w2.writeU32(i); + const r2 = new DataReader(w2.toBytes()); + assert(r2.readString() == ""); + r2.readI256(); + for (let i = 0; i < 300; i++) assert(r2.readU32() == i); + assert(r2.ok); + + // malformed: reads past the end set ok=false and return safe defaults + const r3 = new DataReader(new Uint8Array(2)); + assert(r3.readU64() == 0); + assert(!r3.ok); + const r4 = new DataReader(new Uint8Array(1)); + assert(r4.readString() == ""); // u32 length read fails + assert(!r4.ok); +} + +function testScalars(): void { + const m = new AllScalars(); + m.a = 200; m.b = 60000; m.c = 4000000000; m.d = 0xFFFFFFFFFFFFFFFF; + m.e = -100; m.f = -30000; m.g = -2000000000; m.h = -9000000000000000000; + m.p = 3.5; m.q = -1.25; m.r = true; m.s = "scalars"; + + const d = AllScalars.decode(m.encode()); + assert(d.a == 200 && d.b == 60000 && d.c == 4000000000 && d.d == 0xFFFFFFFFFFFFFFFF); + assert(d.e == -100 && d.f == -30000 && d.g == -2000000000 && d.h == -9000000000000000000); + assert(d.p == 3.5 && d.q == -1.25 && d.r && d.s == "scalars"); + + // JSON round-trip + const j = AllScalars.fromJSON(JSON.parse(m.toJSON().toString())); + assert(j.a == 200 && j.d == 0xFFFFFFFFFFFFFFFF && j.h == -9000000000000000000); + assert(j.q == -1.25 && j.r && j.s == "scalars"); + + // 64-bit fields are decimal strings on the wire (exact past 2^53 in JS clients), + // and number tokens stay readable (legacy writers, hand-written JSON). + const text = m.toJSON().toString(); + assert(text.includes("\"d\":\"18446744073709551615\"")); + assert(text.includes("\"h\":\"-9000000000000000000\"")); + const lenient = AllScalars.fromJSON(JSON.parse("{\"d\":12345,\"h\":-7}")); + assert(lenient.d == 12345 && lenient.h == -7); +} + +function testBig(): void { + const m = new AllBig(); + m.a = u128.fromString("340282366920938463463374607431768211455"); // u128 max + m.b = i128.fromI64(-12345); + m.c = u256.fromU64(987654321); + m.d = i256.One; + + const d = AllBig.decode(m.encode()); + assert(d.a == u128.fromString("340282366920938463463374607431768211455")); + assert(d.b == i128.fromI64(-12345)); + assert(d.c == u256.fromU64(987654321)); + + // JSON: bignum serializes as a decimal string + const text = m.toJSON().toString(); + assert(text.includes("\"a\":\"340282366920938463463374607431768211455\"")); + assert(text.includes("\"b\":\"-12345\"")); + assert(text.includes("\"c\":\"987654321\"")); + assert(text.includes("\"d\":\"1\"")); + const j = AllBig.fromJSON(JSON.parse(text)); + assert(j.a == u128.fromString("340282366920938463463374607431768211455")); + assert(j.b == i128.fromI64(-12345)); + assert(j.c == u256.fromU64(987654321)); + assert(j.d.lo1 == 1 && !j.d.lo2 && !j.d.hi1 && !j.d.hi2); + + // i256 sign handling round-trips, including i256.Min (whose negation is itself) + const neg = new AllBig(); + neg.d = i256.fromString("-57896044618658097711785492504343953926634992332820282019728792003956564819968"); + const negText = neg.toJSON().toString(); + assert(negText.includes("\"d\":\"-57896044618658097711785492504343953926634992332820282019728792003956564819968\"")); + const nj = AllBig.fromJSON(JSON.parse(negText)); + assert(!nj.d.lo1 && !nj.d.lo2 && !nj.d.hi1 && nj.d.hi2 == 0x8000000000000000); + + // legacy limb-array shape (older writers) still reads back + const legacy = AllBig.fromJSON(JSON.parse("{\"a\":[5,1],\"b\":[12345,0],\"c\":[1,2,3,4],\"d\":[9,0,0,0]}")); + assert(legacy.a == new u128(5, 1)); + assert(legacy.b == new i128(12345, 0)); + assert(legacy.c == new u256(1, 2, 3, 4)); + assert(legacy.d.lo1 == 9 && !legacy.d.lo2 && !legacy.d.hi1 && !legacy.d.hi2); +} + +function testNested(): void { + const m = new Nested(); + m.id = 7; m.inner.v = 0xDEADBEEF; m.inner.s = "deep"; m.tail = true; + + const d = Nested.decode(m.encode()); + assert(d.id == 7 && d.inner.v == 0xDEADBEEF && d.inner.s == "deep" && d.tail); + + const j = Nested.fromJSON(JSON.parse(m.toJSON().toString())); + assert(j.id == 7 && j.inner.v == 0xDEADBEEF && j.inner.s == "deep" && j.tail); +} + +function testArrays(): void { + const m = new Bag(); + m.nums = [1, 2, 0xFFFFFFFFFFFFFFFF]; + m.strs = ["a", "bb"]; + m.flags = [true, false, true]; + const i1 = new Inner(); i1.v = 10; i1.s = "x"; + const i2 = new Inner(); i2.v = 20; i2.s = "y"; + m.items = [i1, i2]; + + const d = Bag.decode(m.encode()); + assert(d.nums.length == 3 && d.nums[2] == 0xFFFFFFFFFFFFFFFF); + assert(d.strs.length == 2 && d.strs[1] == "bb"); + assert(d.flags.length == 3 && d.flags[0] && !d.flags[1] && d.flags[2]); + assert(d.items.length == 2 && d.items[0].v == 10 && d.items[1].s == "y"); + + const j = Bag.fromJSON(JSON.parse(m.toJSON().toString())); + assert(j.nums.length == 3 && j.nums[0] == 1); + assert(j.items.length == 2 && j.items[1].v == 20); + + // empty arrays round-trip both ways + const e = Bag.decode((new Bag()).encode()); + assert(e.nums.length == 0 && e.strs.length == 0 && e.flags.length == 0 && e.items.length == 0); + const ej = Bag.fromJSON(JSON.parse((new Bag()).toJSON().toString())); + assert(ej.nums.length == 0 && ej.items.length == 0); +} + +function testTypeId(): void { + const m = new Inner(); m.v = 1; + const bytes = m.encode(); + // first 4 LE bytes are the boundary typeId, equal to dataId() + const r = new DataReader(bytes); + assert(r.readU32() == Inner.dataId()); + // ids stable, nonzero, distinct across types + assert(Inner.dataId() != 0 && Nested.dataId() != 0); + assert(Inner.dataId() != Nested.dataId()); + assert(Inner.dataId() == Inner.dataId()); +} + +function testJsonShape(): void { + const m = new Nested(); + m.id = 5; m.inner.v = 9; m.inner.s = "t"; m.tail = false; + assert(m.toJSON().toString() == "{\"id\":5,\"inner\":{\"v\":\"9\",\"s\":\"t\"},\"tail\":false}"); +} + +export function runAll(): void { + testWriterReader(); + testScalars(); + testBig(); + testNested(); + testArrays(); + testTypeId(); + testJsonShape(); +} diff --git a/tests/data/run.mjs b/tests/data/run.mjs new file mode 100644 index 0000000000..c710645c05 --- /dev/null +++ b/tests/data/run.mjs @@ -0,0 +1,56 @@ +// Compile tests/data/data.spec.ts with the local toilscript (so @data, JSON and +// DataWriter/DataReader are in scope), instantiate it, run runAll(), and report. +import { readFileSync, mkdtempSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const spec = join(here, "data.spec.ts"); +const tmp = mkdtempSync(join(tmpdir(), "datatest-")); +const out = join(tmp, "spec.wasm"); + +const compile = spawnSync( + "node", + [join(root, "bin", "toilscript.js"), spec, "-o", out, "--runtime", "stub"], + { stdio: "inherit" }, +); +if (compile.status !== 0) { + console.error("@data test suite: COMPILE FAILED"); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +let memory = null; +function readString(ptr) { + if (!ptr || !memory) return ""; + const u32 = new Uint32Array(memory.buffer); + const len = u32[(ptr - 4) >>> 2]; + const u16 = new Uint16Array(memory.buffer, ptr, len >>> 1); + return String.fromCharCode.apply(null, u16); +} + +const imports = { + env: { + abort(msgPtr, filePtr, line, col) { + const msg = readString(msgPtr); + throw new Error(`assert failed at data.spec.ts:${line}:${col}${msg ? " (" + msg + ")" : ""}`); + }, + }, +}; + +try { + const { instance } = await WebAssembly.instantiate(readFileSync(out), imports); + memory = instance.exports.memory; + instance.exports.runAll(); + console.log("@data test suite: ALL PASS"); +} catch (e) { + console.error("@data test suite: FAIL"); + console.error(String(e.message || e)); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +rmSync(tmp, { recursive: true, force: true }); diff --git a/tests/dbmigrate/run.mjs b/tests/dbmigrate/run.mjs new file mode 100644 index 0000000000..46021a695b --- /dev/null +++ b/tests/dbmigrate/run.mjs @@ -0,0 +1,396 @@ +// Compile @migrate fixtures and assert the machinery (Phase 3 + the migrations +// convention): +// (a) EMIT - the `users` collection carries the OLD layout version(s) in its +// `migratableFrom` list, so the deploy gate can admit the breaking change. +// (b) WEAVE - the module imports `data.result_schema_version`; only the woven +// version-dispatch references it, so its presence proves the dispatch ran. +// (CONVENTION) - every `@migrate` lives in a `migrations/.migration.ts` +// file (folder + extension, enforced); the build DISCOVERS those files +// (nothing imports them) and the weave INJECTS the cross-file imports into +// the value type's module. So each spec here is a value-type `app.ts` plus a +// separate `migrations/*.migration.ts`, compiled in an isolated dir. +import { readFileSync, mkdtempSync, mkdirSync, writeFileSync, rmSync, openSync, closeSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const bin = join(root, "bin", "toilscript.js"); + +function fail(msg) { + console.error(`@migrate test suite: ${msg}`); + process.exit(1); +} + +// Write `files` into an isolated temp dir and compile `app.ts` with cwd=that dir, +// so migration auto-discovery is scoped to exactly this spec. Returns the run + +// (on success) the wasm bytes. +function build(files, { expectFail = false } = {}) { + const tmp = mkdtempSync(join(tmpdir(), "dbmig-")); + for (const rel of Object.keys(files)) { + const fp = join(tmp, rel); + mkdirSync(dirname(fp), { recursive: true }); + writeFileSync(fp, files[rel]); + } + const out = join(tmp, "out.wasm"); + const log = join(tmp, "compile.log"); + let logFd = -1; + const stdio = expectFail + ? (logFd = openSync(log, "w"), ["ignore", logFd, logFd]) + : ["ignore", "ignore", "inherit"]; + const r = spawnSync("node", ["--enable-source-maps", bin, "app.ts", "-o", out, "--runtime", "stub"], { + cwd: tmp, + stdio, + }); + if (logFd >= 0) closeSync(logFd); + const output = expectFail ? readFileSync(log, "utf8") : ""; + let buf = null; + if (!expectFail) { + if (r.status !== 0) { rmSync(tmp, { recursive: true, force: true }); fail("COMPILE FAILED"); } + buf = readFileSync(out); + } + rmSync(tmp, { recursive: true, force: true }); + return { + status: r.status, + stderr: output, + error: r.error, + signal: r.signal, + buf, + }; +} + +// The value-type module shared by the migrating specs: current `User` (exported so +// a migration file can import it) + the @database that retains its read path. +const APP = ` +@data +class UserId { id: u64 = 0; } +@data +export class User { id: u64 = 0; name: string = ""; email: string = ""; } +@database +class App { @collection users: Documents; } +export function probe(): u64 { return App.users.require(new UserId()).id; } +`; + +// --- catalog decode (mirrors the wire format) --- +function leb(buf, pos) { + let result = 0, shift = 0, p = pos; + for (;;) { const b = buf[p++]; result |= (b & 0x7f) << shift; if ((b & 0x80) === 0) break; shift += 7; } + return [result >>> 0, p]; +} +function findSection(buf, want) { + let pos = 8; + while (pos < buf.length) { + const id = buf[pos++]; + let size; [size, pos] = leb(buf, pos); + const end = pos + size; + if (id === 0) { + let nameLen, np; [nameLen, np] = leb(buf, pos); + if (buf.toString("latin1", np, np + nameLen) === want) return buf.subarray(np + nameLen, end); + } + pos = end; + } + return null; +} +function findCatalog(buf) { return findSection(buf, "toildb.catalog"); } +function decodeTypes(p) { + let pos = 0; + const u16 = () => { const v = p[pos] | (p[pos + 1] << 8); pos += 2; return v; }; + const u32 = () => { const v = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; pos += 4; return v; }; + const u8 = () => p[pos++]; + const str = () => { const n = u32(); const s = p.toString("latin1", pos, pos + n); pos += n; return s; }; + const types = {}; + const nt = u16(); + for (let t = 0; t < nt; t++) { + const name = str(); + const nf = u16(); + const fields = []; + for (let f = 0; f < nf; f++) fields.push({ name: str(), typeName: str(), isArray: u8() !== 0 }); + types[name] = fields; + } + return types; +} +function decodeCatalog(p) { + let pos = 0; + const u16 = () => { const v = p[pos] | (p[pos + 1] << 8); pos += 2; return v; }; + const u32 = () => { const v = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; pos += 4; return v; }; + const u8 = () => p[pos++]; + const str = () => { const n = u32(); const s = p.toString("latin1", pos, pos + n); pos += n; return s; }; + const colls = []; + u16(); const ndb = u16(); + for (let d = 0; d < ndb; d++) { + str(); const nc = u16(); + for (let c = 0; c < nc; c++) { + const name = str(), family = u8(), keyType = str(), valueType = str(); + const valueDataId = u32(), schemaVersion = u32(), generation = u32(); + u8(); u8(); + const nFields = u16(); + for (let f = 0; f < nFields; f++) { str(); str(); u8(); } + const nMig = u16(); + const migratableFrom = []; + for (let mi = 0; mi < nMig; mi++) migratableFrom.push(u32()); + colls.push({ name, family, keyType, valueType, valueDataId, schemaVersion, generation, migratableFrom }); + } + } + return colls; +} +const fnvByte = (h, b) => Math.imul(h ^ (b & 0xff), 0x01000193) >>> 0; +function fnvStr(h, s) { + const n = s.length; + h = fnvByte(h, n & 0xff); h = fnvByte(h, (n >>> 8) & 0xff); + h = fnvByte(h, (n >>> 16) & 0xff); h = fnvByte(h, (n >>> 24) & 0xff); + for (let i = 0; i < n; i++) h = fnvByte(h, s.charCodeAt(i)); + return h >>> 0; +} +function layoutHash(fields) { + let h = 0x811c9dc5; + for (const f of fields) { h = fnvStr(h, f.name); h = fnvStr(h, f.typeName); h = fnvByte(h, f.isArray ? 1 : 0); } + return h >>> 0; +} +const usersOf = (buf) => decodeCatalog(findCatalog(buf)).find((c) => c.name === "users"); + +const oldVersion = layoutHash([ + { name: "id", typeName: "u32", isArray: false }, + { name: "name", typeName: "string", isArray: false }, +]); + +// --- (a) the basic migration, @migrate in migrations/User.migration.ts --- +const basic = build({ + "app.ts": APP, + "migrations/User.migration.ts": ` +import { User } from "../app"; +@data +export class UserV1 { id: u32 = 0; name: string = ""; } +@migrate +export function up(old: UserV1): User { + const u = new User(); + u.id = old.id; u.name = old.name; u.email = ""; + return u; +} +`, +}).buf; +const users = usersOf(basic); +if (!users) fail("users collection missing"); +if (users.migratableFrom.length !== 1) fail(`expected 1 migratable version, got ${users.migratableFrom.length}`); +if (users.migratableFrom[0] !== oldVersion) fail(`migratableFrom ${users.migratableFrom[0]} != UserV1 layout ${oldVersion}`); +if (users.schemaVersion === oldVersion) fail("current schema_version must differ from the migratable old version"); + +// (b) the weave pulled in the version import (only the dispatch references it). +if (!basic.toString("latin1").includes("result_schema_version")) + fail("woven decodeInto did not pull in data.result_schema_version (cross-file)"); + +// --- (c) a NON-@migrate module must NOT import the version (no hot-path cost) --- +const plain = build({ "app.ts": readFileSync(join(here, "..", "dbstatic", "spec.ts"), "utf8") }).buf; +if (plain.toString("latin1").includes("result_schema_version")) + fail("a module with no @migrate must not import data.result_schema_version"); + +// --- (d) a @migrate that touches the database must NOT compile (even when correctly placed) --- +const bad = build({ + "app.ts": ` +@data +export class UserId { id: u64 = 0; } +@data +export class User { id: u64 = 0; } +@database +export class App { @collection users: Documents; } +export function probe(): u64 { return App.users.require(new UserId()).id; } +`, + "migrations/User.migration.ts": ` +import { App, User, UserId } from "../app"; +@data +export class UserV1 { id: u32 = 0; } +@migrate +export function up(old: UserV1): User { + // ILLEGAL: a migration is a pure transform; it must not touch the database. + App.users.delete(new UserId()); + const u = new User(); u.id = old.id; return u; +} +`, +}, { expectFail: true }); +if (bad.status === 0) fail("a @migrate that touches the database must be a compile error"); +if (!bad.stderr.includes("migrate")) + fail(`expected a @migrate diagnostic, got: status=${bad.status} signal=${bad.signal} error=${bad.error ?? ""} output=${bad.stderr.slice(0, 200)}`); + +// --- (d2) a @migrate OUTSIDE a migrations/*.migration.ts file must NOT compile --- +const misplaced = build({ + "app.ts": ` +@data +class UserId { id: u64 = 0; } +@data +export class User { id: u64 = 0; name: string = ""; email: string = ""; } +@data +export class UserV1 { id: u32 = 0; name: string = ""; } +@migrate +export function up(old: UserV1): User { const u = new User(); u.id = old.id; u.name = old.name; u.email = ""; return u; } +@database +class App { @collection users: Documents; } +export function probe(): u64 { return App.users.require(new UserId()).id; } +`, +}, { expectFail: true }); +if (misplaced.status === 0) fail("a @migrate outside migrations/*.migration.ts must be a compile error"); +if (!misplaced.stderr.includes("migrations/")) + fail(`expected a migration-location diagnostic, got: ${misplaced.stderr.slice(0, 200)}`); + +// --- (e) the DELTA form `(old, into): void` compiles, emits, and weaves --- +const delta = build({ + "app.ts": APP, + "migrations/User.migration.ts": ` +import { User } from "../app"; +@data +export class UserV1 { id: u32 = 0; name: string = ""; } +@migrate +export function up(old: UserV1, u: User): void { + // name is carried over automatically (shared field); email defaults to "". + u.id = old.id; +} +`, +}).buf; +const dusers = usersOf(delta); +if (!dusers) fail("delta: users collection missing"); +if (dusers.migratableFrom.length !== 1 || dusers.migratableFrom[0] !== oldVersion) + fail(`delta: migratableFrom ${JSON.stringify(dusers.migratableFrom)} != [${oldVersion}]`); +if (!delta.toString("latin1").includes("result_schema_version")) + fail("delta: woven decode did not pull in data.result_schema_version"); + +// --- (f) a migration CHAIN: both v0 and v1 reach the current User --- +const chain = build({ + "app.ts": APP, + "migrations/User.migration.ts": ` +import { User } from "../app"; +@data +export class UserV0 { id: u32 = 0; } +@data +export class UserV1 { id: u32 = 0; name: string = ""; } +@migrate +export function up01(old: UserV0): UserV1 { const u = new UserV1(); u.id = old.id; u.name = ""; return u; } +@migrate +export function up12(old: UserV1): User { const u = new User(); u.id = old.id; u.name = old.name; u.email = ""; return u; } +`, +}).buf; +const cusers = usersOf(chain); +if (!cusers) fail("chain: users collection missing"); +const v0 = layoutHash([{ name: "id", typeName: "u32", isArray: false }]); +const v1 = oldVersion; +if (cusers.migratableFrom.length !== 2) + fail(`chain: expected 2 migratable versions, got ${JSON.stringify(cusers.migratableFrom)}`); +for (const want of [v0, v1]) { + if (!cusers.migratableFrom.includes(want)) + fail(`chain: migratableFrom ${JSON.stringify(cusers.migratableFrom)} missing ${want}`); +} +if (cusers.schemaVersion === v0 || cusers.schemaVersion === v1) + fail("chain: current version must differ from both old versions"); +if (!chain.toString("latin1").includes("result_schema_version")) + fail("chain: woven decode did not pull in data.result_schema_version"); + +// --- (g) a NESTED @data type emits a toildb.types registry with its layout --- +const nested = build({ "app.ts": readFileSync(join(here, "spec_nested.ts"), "utf8") }).buf; +const typesSec = findSection(nested, "toildb.types"); +if (typesSec === null) fail("nested: toildb.types section not emitted"); +const types = decodeTypes(typesSec); +if (!types["Address"]) fail(`nested: Address missing from type registry (${Object.keys(types)})`); +const addr = types["Address"]; +if (addr.length !== 2 || addr[0].name !== "street" || addr[0].typeName !== "string" || addr[1].name !== "zip") + fail(`nested: Address layout wrong: ${JSON.stringify(addr)}`); +if (!types["User"]) fail("nested: User missing from type registry"); + +// --- (h) the RECURSIVE schema_version: the `users` collection's emitted version +// hashes THROUGH the nested Address type, and is the pinned cross-repo +// vector also asserted in the backend (toildb schema_descriptor.rs: +// `matches_the_toilscript_compiler_nested_layout_hash`). If either repo's +// recursion diverges, this number drifts and every nested-row read mismatches. +// The recursion type map mirrors the runtime `toildb.types` registry (collection +// value types + their nested types). User { id:u64, addr:Address }; Address is a +// known @data type so the hash continues over its fields after the `addr` triple. +function layoutHashRec(fields, typeMap, seen) { + let h = 0x811c9dc5; + const walk = (h, fields, seen) => { + for (const f of fields) { + h = fnvStr(h, f.name); + h = fnvStr(h, f.typeName); + h = fnvByte(h, f.isArray ? 1 : 0); + if (typeMap.has(f.typeName) && !seen.has(f.typeName)) { + seen.add(f.typeName); + h = walk(h, typeMap.get(f.typeName), seen); + seen.delete(f.typeName); + } + } + return h >>> 0; + }; + return walk(h, fields, seen || new Set()); +} +const F = (name, typeName, isArray = false) => ({ name, typeName, isArray }); +const recMap = new Map(); +recMap.set("Address", [F("street", "string"), F("zip", "string")]); +recMap.set("UserId", [F("id", "u64")]); +recMap.set("User", [F("id", "u64"), F("addr", "Address")]); +const expectedNested = layoutHashRec([F("id", "u64"), F("addr", "Address")], recMap); +// PINNED cross-repo vector (recomputed once; identical in the backend). +if (expectedNested !== 1089707667) + fail(`nested layoutHash drifted from the pinned cross-repo vector: ${expectedNested}`); +const nestedUsers = usersOf(nested); +if (!nestedUsers) fail("nested: users collection missing from catalog"); +if (nestedUsers.schemaVersion !== expectedNested) + fail(`nested: users.schema_version ${nestedUsers.schemaVersion} != recursive layoutHash ${expectedNested}`); +// A FLAT hash of the same outer fields (ignoring Address) must DIFFER, proving the +// emitted version actually recursed into the nested type. +const flatUser = layoutHash([F("id", "u64"), F("addr", "Address")]); +if (nestedUsers.schemaVersion === flatUser) + fail("nested: schema_version did not recurse into the nested @data type (flat == recursive)"); + +// --- (i) a @migrate whose OLD type contains a NESTED @data field: the emitted +// `migratableFrom` is the RECURSIVE hash of the old type (through the live +// nested type), so it matches the recursive schema_version the old layout was +// deployed under. This is what makes a nested-type change @migrate-able rather +// than refuse-only. +const APP_NESTED = ` +@data +export class Tag { key: string = ""; val: string = ""; } +@data +class UserId { id: u64 = 0; } +@data +export class User { id: u64 = 0; tag: Tag = new Tag(); extra: string = ""; } +@database +class App { @collection users: Documents; } +export function probe(): u64 { return App.users.require(new UserId()).id; } +`; +const nestedMig = build({ + "app.ts": APP_NESTED, + "migrations/User.migration.ts": ` +import { User, Tag } from "../app"; +// The old shape: same nested Tag, but no extra field yet (an append since). +@data +export class UserOld { id: u64 = 0; tag: Tag = new Tag(); } +@migrate +export function up(old: UserOld): User { + const u = new User(); u.id = old.id; u.tag = old.tag; u.extra = ""; return u; +} +`, +}).buf; +const nmUsers = usersOf(nestedMig); +if (!nmUsers) fail("nested-migrate: users collection missing"); +// `Tag` is a LIVE @data type (not a *.migration shape), so it is in the recursion +// map; `UserOld { id:u64, tag:Tag }` hashes recursively through Tag. +const recMap2 = new Map(); +recMap2.set("Tag", [F("key", "string"), F("val", "string")]); +recMap2.set("UserId", [F("id", "u64")]); +recMap2.set("User", [F("id", "u64"), F("tag", "Tag"), F("extra", "string")]); +const oldUserVersion = layoutHashRec([F("id", "u64"), F("tag", "Tag")], recMap2); +if (nmUsers.migratableFrom.length !== 1) + fail(`nested-migrate: expected 1 migratable version, got ${JSON.stringify(nmUsers.migratableFrom)}`); +if (nmUsers.migratableFrom[0] !== oldUserVersion) + fail(`nested-migrate: migratableFrom ${nmUsers.migratableFrom[0]} != recursive old-version ${oldUserVersion}`); +// And it must DIFFER from a flat hash of the old fields (proving the old-version +// hash recursed into Tag too). +const oldUserFlat = layoutHash([F("id", "u64"), F("tag", "Tag")]); +if (nmUsers.migratableFrom[0] === oldUserFlat) + fail("nested-migrate: old-version hash did not recurse into the nested @data type"); +// The current schema_version (with the appended `extra`) recurses through Tag too, +// and differs from the migratable old version. +const curUserVersion = layoutHashRec([F("id", "u64"), F("tag", "Tag"), F("extra", "string")], recMap2); +if (nmUsers.schemaVersion !== curUserVersion) + fail(`nested-migrate: current schema_version ${nmUsers.schemaVersion} != recursive ${curUserVersion}`); +if (nmUsers.schemaVersion === oldUserVersion) + fail("nested-migrate: current and old versions must differ"); + +console.log("@migrate test suite: ALL PASS"); diff --git a/tests/dbmigrate/spec_nested.ts b/tests/dbmigrate/spec_nested.ts new file mode 100644 index 0000000000..110b760207 --- /dev/null +++ b/tests/dbmigrate/spec_nested.ts @@ -0,0 +1,29 @@ +// A NESTED @data type: `User { addr: Address }`. The compiler must emit the +// `toildb.types` registry containing Address's layout, so the deploy gate can +// recurse into a nested change a flat catalog compare would miss. + +@data +class Address { + street: string = ""; + zip: string = ""; +} + +@data +class UserId { + id: u64 = 0; +} + +@data +class User { + id: u64 = 0; + addr: Address = new Address(); +} + +@database +class App { + @collection users: Documents; +} + +export function probe(): u64 { + return App.users.require(new UserId()).id; +} diff --git a/tests/dbresolve/run.mjs b/tests/dbresolve/run.mjs new file mode 100644 index 0000000000..1318975244 --- /dev/null +++ b/tests/dbresolve/run.mjs @@ -0,0 +1,95 @@ +// Compile a tiny ToilDB program and instantiate it against a host that rejects +// collection resolution. The generated binding must trap immediately instead of +// reading the zeroed output buffer as handle 0 and calling request-time DB ops. +import { mkdtempSync, writeFileSync, readFileSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const tmp = mkdtempSync(join(tmpdir(), "dbresolve-")); +const app = join(tmp, "app.ts"); +const out = join(tmp, "out.wasm"); + +function fail(msg) { + console.error(`ToilDB resolve test suite: ${msg}`); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +writeFileSync(app, ` +@data +class Key { + id: string = ""; + constructor(id: string = "") { this.id = id; } +} + +@data +class User { + name: string = ""; +} + +@database +class App { + @collection static users: Documents; +} + +export function probe(): i32 { + return App.users.exists(new Key("alice")) ? 1 : 0; +} +`); + +const compile = spawnSync( + "node", + [join(root, "bin", "toilscript.js"), app, "-o", out, "--runtime", "stub"], + { stdio: "inherit" }, +); +if (compile.status !== 0) fail("COMPILE FAILED"); + +let memory = null; +let existsCalls = 0; +function readString(ptr) { + if (!ptr || !memory) return ""; + const u32 = new Uint32Array(memory.buffer); + const len = u32[(ptr - 4) >>> 2]; + const u16 = new Uint16Array(memory.buffer, ptr, len >>> 1); + return String.fromCharCode.apply(null, u16); +} + +const imports = { + env: { + abort(msgPtr, filePtr, line, col) { + const msg = readString(msgPtr); + const file = readString(filePtr); + throw new Error(`abort ${file}:${line}:${col}${msg ? " (" + msg + ")" : ""}`); + }, + "data.resolve_collection"() { + return -1007; + }, + "data.exists"(handle) { + existsCalls++; + if (handle === 0) throw new Error("BUG: request-time DB op used handle 0"); + return 0; + }, + }, +}; + +try { + const { instance } = await WebAssembly.instantiate(readFileSync(out), imports); + memory = instance.exports.memory; + instance.exports.probe(); + fail("probe unexpectedly returned after resolve_collection failed"); +} catch (e) { + const msg = String(e && e.message ? e.message : e); + if (!msg.includes("ToilDB collection resolve failed")) { + fail(`expected resolve failure abort, got: ${msg}`); + } + if (existsCalls !== 0) { + fail(`request-time DB op was called ${existsCalls} time(s) after failed resolve`); + } +} + +rmSync(tmp, { recursive: true, force: true }); +console.log("ToilDB resolve test suite: ALL PASS"); diff --git a/tests/dbstatic/run.mjs b/tests/dbstatic/run.mjs new file mode 100644 index 0000000000..247f80644b --- /dev/null +++ b/tests/dbstatic/run.mjs @@ -0,0 +1,139 @@ +// Compile tests/dbstatic/spec.ts with the local toilscript and assert that the +// `@collection static` form (a) compiles (no TS2718 duplicate / AS238 missing +// initializer), and (b) still reaches the `toildb.catalog` custom section with +// every collection (the demote-to-instance step must not hide it). Compile-only: +// the `@database` getters import the `__toildbResolve` host function, so the +// module is not instantiated here. +import { readFileSync, mkdtempSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const spec = join(here, "spec.ts"); +const tmp = mkdtempSync(join(tmpdir(), "dbstatic-")); +const out = join(tmp, "spec.wasm"); + +function fail(msg) { + console.error(`@collection static test suite: ${msg}`); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +const compile = spawnSync( + "node", + [join(root, "bin", "toilscript.js"), spec, "-o", out, "--runtime", "stub"], + { stdio: "inherit" }, +); +if (compile.status !== 0) fail("COMPILE FAILED"); + +// The catalog records each `@collection` from the AST; the demoted static fields +// must still be there with the right names, alongside the legacy instance one. +const wasmBuf = readFileSync(out); +const wasm = wasmBuf.toString("latin1"); +rmSync(tmp, { recursive: true, force: true }); +for (const needle of ["toildb.catalog", "items", "hits", "legacy"]) { + if (!wasm.includes(needle)) fail(`MISSING '${needle}' in catalog/output`); +} + +// --- schema_version is the field-LAYOUT hash, not the value-name hash --- +// Decode the `toildb.catalog` custom section and check each collection's +// schema_version, so a shape change (add/remove/reorder a field) is detectable. +function leb(buf, pos) { + let result = 0, shift = 0, p = pos; + for (;;) { + const b = buf[p++]; + result |= (b & 0x7f) << shift; + if ((b & 0x80) === 0) break; + shift += 7; + } + return [result >>> 0, p]; +} +function findCatalog(buf) { + let pos = 8; // past magic + version + while (pos < buf.length) { + const id = buf[pos++]; + let size; [size, pos] = leb(buf, pos); + const end = pos + size; + if (id === 0) { + let nameLen, np; [nameLen, np] = leb(buf, pos); + if (buf.toString("latin1", np, np + nameLen) === "toildb.catalog") { + return buf.subarray(np + nameLen, end); + } + } + pos = end; + } + return null; +} +function decodeCatalog(p) { + let pos = 0; + const u16 = () => { const v = p[pos] | (p[pos + 1] << 8); pos += 2; return v; }; + const u32 = () => { const v = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; pos += 4; return v; }; + const u8 = () => p[pos++]; + const str = () => { const n = u32(); const s = p.toString("latin1", pos, pos + n); pos += n; return s; }; + const colls = []; + u16(); // version + const ndb = u16(); + for (let d = 0; d < ndb; d++) { + str(); // db name + const nc = u16(); + for (let c = 0; c < nc; c++) { + const name = str(), family = u8(), keyType = str(), valueType = str(); + const valueDataId = u32(), schemaVersion = u32(), generation = u32(); + u8(); u8(); // replication, placement + const nFields = u16(); + const fields = []; + for (let f = 0; f < nFields; f++) { + fields.push({ name: str(), typeName: str(), isArray: u8() !== 0 }); + } + const nMig = u16(); + const migratableFrom = []; + for (let mi = 0; mi < nMig; mi++) migratableFrom.push(u32()); + colls.push({ name, family, keyType, valueType, valueDataId, schemaVersion, generation, fields, migratableFrom }); + } + } + return colls; +} +const fnvByte = (h, b) => Math.imul(h ^ (b & 0xff), 0x01000193) >>> 0; +function fnvStr(h, s) { + const n = s.length; + h = fnvByte(h, n & 0xff); h = fnvByte(h, (n >>> 8) & 0xff); + h = fnvByte(h, (n >>> 16) & 0xff); h = fnvByte(h, (n >>> 24) & 0xff); + for (let i = 0; i < n; i++) h = fnvByte(h, s.charCodeAt(i)); + return h >>> 0; +} +function layoutHash(fields) { + let h = 0x811c9dc5; + for (const f of fields) { h = fnvStr(h, f.name); h = fnvStr(h, f.typeName); h = fnvByte(h, f.isArray ? 1 : 0); } + return h >>> 0; +} +const fnv1a = (s) => { let h = 0x811c9dc5; for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 0x01000193) >>> 0; return h >>> 0; }; + +const cat = findCatalog(wasmBuf); +if (cat === null) fail("toildb.catalog section not found for decode"); +const colls = decodeCatalog(cat); +const items = colls.find((c) => c.name === "items"); +const legacy = colls.find((c) => c.name === "legacy"); +if (!items || !legacy) fail("items/legacy collections missing from decoded catalog"); +// value type Item = { name: string } -> layout hash of one string field. +// The literal pins the cross-repo vector also asserted in toildb's +// schema_descriptor.rs (`matches_the_toilscript_compiler_layout_hash`). +const expected = layoutHash([{ name: "name", typeName: "string", isArray: false }]); +if (expected !== 4276894199) fail(`layoutHash drifted from the pinned cross-repo vector: ${expected}`); +if (items.schemaVersion !== expected) fail(`items.schema_version ${items.schemaVersion} != layoutHash ${expected}`); +if (items.schemaVersion === fnv1a("Item")) fail("schema_version is still the value-NAME hash, not the field LAYOUT hash"); +if (items.valueDataId !== fnv1a("Item")) fail("value_data_id must remain the value-name hash"); +// items and legacy share the value type Item, so they share a schema_version. +if (items.schemaVersion !== legacy.schemaVersion) fail("same value type must yield the same schema_version"); +// the field LAYOUT is emitted too (so the deploy gate can compare old vs new). +// Item = { name: string }. +if (items.fields.length !== 1) fail(`items should emit 1 field, got ${items.fields.length}`); +if (items.fields[0].name !== "name" || items.fields[0].typeName !== "string" || items.fields[0].isArray) + fail(`items field layout wrong: ${JSON.stringify(items.fields)}`); +// hits is Counter -> host-owned i64 value, no @data layout -> zero fields. +const hits = colls.find((c) => c.name === "hits"); +if (!hits || hits.fields.length !== 0) fail("host-owned (Counter) value emits no field layout"); + +console.log("@collection static test suite: ALL PASS"); diff --git a/tests/dbstatic/spec.ts b/tests/dbstatic/spec.ts new file mode 100644 index 0000000000..a91c00b5bb --- /dev/null +++ b/tests/dbstatic/spec.ts @@ -0,0 +1,45 @@ +// Regression fixture for the `@collection static` form of a `@database` class. +// +// The compiler turns each `@collection` field into a lazy STATIC getter +// (`DB.coll`). Writing the field itself as `static` lets `DB.coll` type-check in +// stock TypeScript with NO language-service plugin (and keeps `tsc` clean), but a +// naive transform would then hit a duplicate static member (TS2718) and a +// missing initializer (AS238). The parser demotes a static `@collection` field to +// a vestigial instance field before injecting the getter, so this must compile, +// and the demoted field must still reach the `toildb.catalog` section with the +// correct family. Both the new static form and the legacy instance form appear +// below so a single compile exercises both paths. + +@data +class Key { + id: string = ""; + constructor(id: string = "") { + this.id = id; + } +} + +@data +class Item { + name: string = ""; + constructor(name: string = "") { + this.name = name; + } +} + +@database +class DB { + @collection static items: Documents; // new STATIC form (no `!`; plugin-free editor) + @collection static hits: Counter; // new STATIC form (no `!`) + @collection legacy!: Events; // legacy INSTANCE form, still supported +} + +// `@action` permits writes; this also confirms the function-kind checker still +// sees the static collections (it would not if the demoted field were dropped). +@action +export function run(): i32 { + const k = new Key("a"); + DB.items.create(k, new Item("x")); + DB.hits.add(k, 1); + DB.legacy.append(k, new Item("y")); + return DB.hits.get(k); +} diff --git a/tests/features.json b/tests/features.json index 5c47772500..bbbe4f8992 100644 --- a/tests/features.json +++ b/tests/features.json @@ -27,7 +27,8 @@ "--enable exception-handling" ], "v8_flags": [ - ] + ], + "enabled": true }, "simd": { "asc_flags": [ @@ -43,5 +44,12 @@ "v8_flags": [ "--experimental-wasm-relaxed-simd" ] + }, + "closures": { + "asc_flags": [ + "--enable closures" + ], + "v8_flags": [ + ] } } diff --git a/tests/import/index.ts b/tests/import/index.ts index 46098f7ece..02cfc3cc99 100644 --- a/tests/import/index.ts +++ b/tests/import/index.ts @@ -1,3 +1,3 @@ -import * as as from "../../dist/assemblyscript.js"; +import * as as from "../../dist/toilscript.js"; var program: as.Program = as.newProgram(as.newOptions()); as.parse(program, "", "empty"); diff --git a/tests/json/COVERAGE.md b/tests/json/COVERAGE.md new file mode 100644 index 0000000000..d317f18fab --- /dev/null +++ b/tests/json/COVERAGE.md @@ -0,0 +1,53 @@ +# std/assembly/json.ts test coverage + +`json.spec.ts` is an exhaustive unit suite for `std/assembly/json.ts`, run by +`run.mjs` (or `npm run test:json`). It targets 100% runtime branch coverage. + +## Why not an automated coverage tool + +`@btc-vision/as-pect` + `@btc-vision/as-covers` would print a percentage, but +as-pect hard-codes the `@btc-vision/assemblyscript` compiler, which does not +bundle the `JSON` global (only `toilscript` does). So the spec is compiled and +run by `toilscript` directly, and coverage is established by an exhaustive, +audited branch enumeration rather than a tool badge. + +## Audit + +Every runtime branch of `json.ts` is exercised by at least one assertion: + +- `of`: boolean, signed integer, unsigned integer, float, string. +- value-tree `toString`: bool both ways, number i64 / u64 / f64-finite / + f64-nonfinite, string, array (empty + non-empty), object (empty + non-empty), + default (null and error values). +- typed `stringify`: bool, integer, float finite + non-finite, string + (non-null + null + empty), array (non-null + null + empty). +- `quote`: every escape (`"`, `\`, `\b`, `\f`, `\n`, `\r`, `\t`), control char + below 0x20 (`\uXXXX`), normal ascii, non-ascii pass-through, empty string. +- predicates `isNull`..`isError` (true and false each); `errorMessage` (error + and non-error). +- accessors `asBool` / `asF64` / `asI64` / `asU64` across every number sub-kind + and off-kind; `asString`; `length` / `at` (in range, negative, out of range, + non-array) / `has` / `get` / `objectKeys`. +- `parse` / `Parser`: every value kind; numbers (unsigned, signed, u64 max, + fraction, exponent lower `e` and upper `E`, exponent sign); strings (every + escape, `\u` with digit / a-f / A-F, invalid `\u`); whitespace (space, tab, + newline, carriage return, trailing); arrays and objects (empty, populated, + nested, array of objects); and every error path (empty input, unexpected + char, invalid literal, unterminated string, unterminated/invalid escape, + invalid number, unclosed/bad-separator array, end-before-key/close, non-string + key, missing colon, bad-separator object, element/value parse-error + propagation, trailing characters). `hexVal` digit / a-f / A-F / invalid. + +## Not runtime reachable (by design) + +The two `ERROR(...)` guards in `of` and `stringify` are compile-time +checks: instantiating those generics with an unsupported type fails the build, +so the guard never runs at runtime. Every supported type compiles and runs, +which is what the suite verifies. During the audit two genuinely dead branches +were removed (`Parser.peek`'s out-of-range return, always guarded by `atEnd`; +`Parser.fail`'s "error already set" guard, callers always return on first error) +so there is no unreachable code left to skew the count. + +## Run + + npm run test:json diff --git a/tests/json/json.spec.ts b/tests/json/json.spec.ts new file mode 100644 index 0000000000..984e73b640 --- /dev/null +++ b/tests/json/json.spec.ts @@ -0,0 +1,214 @@ +// Exhaustive unit tests for std/assembly/json.ts. +// +// Runs against the toilscript compiler (so the JSON global is in scope) via +// tests/json/run.mjs. Every runtime branch of json.ts is exercised here; the +// compile-time ERROR() guards (unsupported types in of / stringify) are +// not runtime reachable and are noted in run.mjs. +// +// Each `assert` aborts with its source line on failure, which the runner reports. + +function testFactoriesAndKinds(): void { + assert(JSON.nul().isNull()); + assert(JSON.of(true).isBool()); + assert(JSON.of(1).isNumber()); + assert(JSON.of("x").isString()); + assert(JSON.arr().isArray()); + assert(JSON.obj().isObject()); + assert(JSON.errorValue("boom").isError()); + + // each predicate false branch + assert(!JSON.of(true).isNull()); + assert(!JSON.nul().isBool()); + assert(!JSON.nul().isNumber()); + assert(!JSON.nul().isString()); + assert(!JSON.nul().isArray()); + assert(!JSON.nul().isObject()); + assert(!JSON.nul().isError()); +} + +function testToString(): void { + // BOOL both + assert(JSON.of(true).toString() == "true"); + assert(JSON.of(false).toString() == "false"); + // NUM signed / unsigned / float finite / float non-finite + assert(JSON.of(-5).toString() == "-5"); + assert(JSON.of(u64.MAX_VALUE).toString() == "18446744073709551615"); + assert(JSON.of(3.5).toString() == "3.5"); + assert(JSON.of(NaN).toString() == "null"); + assert(JSON.of(Infinity).toString() == "null"); + // STR + assert(JSON.of("a").toString() == "\"a\""); + // ARR empty / non-empty + assert(JSON.arr().toString() == "[]"); + assert(JSON.arr().push(JSON.of(1)).push(JSON.of(2)).toString() == "[1,2]"); + // OBJ empty / non-empty + assert(JSON.obj().toString() == "{}"); + assert(JSON.obj().set("k", JSON.of(7)).toString() == "{\"k\":7}"); + // default: NULL and ERR both serialize to null + assert(JSON.nul().toString() == "null"); + assert(JSON.errorValue("x").toString() == "null"); + // array of objects + assert( + JSON.arr() + .push(JSON.obj().set("id", JSON.of(1))) + .push(JSON.obj().set("id", JSON.of(2))) + .toString() == "[{\"id\":1},{\"id\":2}]", + ); +} + +function testStringify(): void { + assert(JSON.stringify(true) == "true"); + assert(JSON.stringify(false) == "false"); + assert(JSON.stringify(42) == "42"); + assert(JSON.stringify(u64.MAX_VALUE) == "18446744073709551615"); + assert(JSON.stringify(3.5) == "3.5"); + assert(JSON.stringify(NaN) == "null"); + assert(JSON.stringify("a") == "\"a\""); + assert(JSON.stringify("") == "\"\""); // quote loop, zero iterations + assert(JSON.stringify(changetype(0)) == "null"); + assert(JSON.stringify>([1, 2, 3]) == "[1,2,3]"); + assert(JSON.stringify>([]) == "[]"); + assert(JSON.stringify>(changetype>(0)) == "null"); +} + +function testQuoteEscapes(): void { + assert(JSON.stringify("\"") == "\"\\\"\""); + assert(JSON.stringify("\\") == "\"\\\\\""); + assert(JSON.stringify(String.fromCharCode(0x08)) == "\"\\b\""); + assert(JSON.stringify(String.fromCharCode(0x0c)) == "\"\\f\""); + assert(JSON.stringify("\n") == "\"\\n\""); + assert(JSON.stringify("\r") == "\"\\r\""); + assert(JSON.stringify("\t") == "\"\\t\""); + // control char below 0x20: \uXXXX (exercises hex4 low + high nibbles) + assert(JSON.stringify(String.fromCharCode(0x01)) == "\"\\u0001\""); + assert(JSON.stringify(String.fromCharCode(0x1f)) == "\"\\u001f\""); + // normal ascii and pass-through of non-ascii (>= 0x80) + assert(JSON.stringify("z") == "\"z\""); + assert(JSON.stringify(String.fromCharCode(0xe9)) == "\"" + String.fromCharCode(0xe9) + "\""); +} + +function testParseValues(): void { + assert(JSON.parse("null").isNull()); + assert(JSON.parse("true").asBool() == true); + assert(JSON.parse("false").asBool() == false); + // numbers: unsigned int, signed int, u64 max, float frac, float exp (+ signs) + assert(JSON.parse("123").asU64() == 123); + assert(JSON.parse("-123").asI64() == -123); + assert(JSON.parse("18446744073709551615").asU64() == u64.MAX_VALUE); + assert(JSON.parse("1.5").asF64() == 1.5); + assert(JSON.parse("1e3").asF64() == 1000.0); + assert(JSON.parse("1E3").asF64() == 1000.0); // uppercase exponent + assert(JSON.parse("1e+3").asF64() == 1000.0); + assert(JSON.parse("1500e-3").asF64() == 1.5); + // strings + every escape + \u (lower, upper, digits) + assert(JSON.parse("\"abc\"").asString() == "abc"); + assert(JSON.parse("\"a\\\"b\"").asString() == "a\"b"); + assert(JSON.parse("\"a\\\\b\"").asString() == "a\\b"); + assert(JSON.parse("\"a\\/b\"").asString() == "a/b"); + assert(JSON.parse("\"\\b\\f\\n\\r\\t\"").asString() == String.fromCharCode(0x08) + String.fromCharCode(0x0c) + "\n\r\t"); + assert(JSON.parse("\"\\u0041\"").asString() == "A"); + assert(JSON.parse("\"\\u00ab\"").asString() == String.fromCharCode(0xab)); // a-f hex + assert(JSON.parse("\"\\u00CD\"").asString() == String.fromCharCode(0xcd)); // A-F hex + // arrays + objects + whitespace + nesting + array-of-objects + assert(JSON.parse("[]").length() == 0); + assert(JSON.parse("{}").length() == 0); + assert(JSON.parse(" \t\n\r [1, 2, 3] ").length() == 3); + const o = JSON.parse("{\"a\":1,\"b\":[true,null,\"x\"],\"c\":-3.5}"); + assert(o.isObject()); + assert(o.get("a").asI64() == 1); + assert(o.get("b").length() == 3); + assert(o.get("b").at(0).asBool() == true); + assert(o.get("b").at(1).isNull()); + assert(o.get("b").at(2).asString() == "x"); + assert(o.get("c").asF64() == -3.5); + const arr = JSON.parse("[{\"id\":1},{\"id\":2}]"); + assert(arr.length() == 2); + assert(arr.at(0).get("id").asU64() == 1); + // round-trip stringify(parse(x)) == x + const t = "{\"n\":7,\"s\":\"hi\",\"a\":[1,2,3]}"; + assert(JSON.parse(t).toString() == t); +} + +function testParseErrors(): void { + assert(JSON.parse("").isError()); // empty / end of input + assert(JSON.parse("@").isError()); // unexpected char + assert(JSON.parse("tru").isError()); // invalid literal (end mid-word) + assert(JSON.parse("trX").isError()); // invalid literal (mismatch) + assert(JSON.parse("\"abc").isError()); // unterminated string + assert(JSON.parse("\"\\").isError()); // unterminated escape + assert(JSON.parse("\"\\x\"").isError()); // invalid escape + assert(JSON.parse("\"\\uZZZZ\"").isError()); // invalid \u hex + assert(JSON.parse("-").isError()); // number, no digits + assert(JSON.parse("1.").isError()); // number, empty fraction + assert(JSON.parse("1e").isError()); // number, empty exponent + assert(JSON.parse("[").isError()); // array, end before close or value + assert(JSON.parse("{").isError()); // object, end before key + assert(JSON.parse("[@]").isError()); // array element parse error + assert(JSON.parse("[1,2").isError()); // unclosed array + assert(JSON.parse("[1 2]").isError()); // bad array separator + assert(JSON.parse("{1:2}").isError()); // non-string key + assert(JSON.parse("{\"a\" 1}").isError()); // missing colon + assert(JSON.parse("{\"a\":1 \"b\":2}").isError()); // bad object separator + assert(JSON.parse("{\"a\":@}").isError()); // value parse error propagates + assert(JSON.parse("{\"a:1}").isError()); // unterminated key string + assert(JSON.parse("1 2").isError()); // trailing characters + // error message is readable and only the first error sticks + assert(JSON.parse("@").errorMessage().length != 0); + assert(JSON.errorValue("msg").errorMessage() == "msg"); + assert(JSON.nul().errorMessage() == ""); +} + +function testAccessors(): void { + // asBool + assert(JSON.of(true).asBool() == true); + assert(JSON.nul().asBool() == false); + // asF64 across number sub-kinds + off-kind + assert(JSON.of(5).asF64() == 5.0); + assert(JSON.of(5).asF64() == 5.0); + assert(JSON.of(3.5).asF64() == 3.5); + assert(JSON.nul().asF64() == 0.0); + // asI64 + assert(JSON.of(-5).asI64() == -5); + assert(JSON.of(5).asI64() == 5); + assert(JSON.of(3.0).asI64() == 3); + assert(JSON.nul().asI64() == 0); + // asU64 + assert(JSON.of(9).asU64() == 9); + assert(JSON.of(9).asU64() == 9); + assert(JSON.of(9.0).asU64() == 9); + assert(JSON.nul().asU64() == 0); + // asString + assert(JSON.of("y").asString() == "y"); + assert(JSON.nul().asString() == ""); + // length per kind + assert(JSON.arr().push(JSON.nul()).length() == 1); + assert(JSON.obj().set("a", JSON.nul()).length() == 1); + assert(JSON.nul().length() == 0); + // at: in range, out of range, non-array + assert(JSON.arr().push(JSON.of(8)).at(0).asI64() == 8); + assert(JSON.arr().push(JSON.of(8)).at(-1).isNull()); // negative index + assert(JSON.arr().at(5).isNull()); + assert(JSON.nul().at(0).isNull()); + // has: found, not found, non-object + const ob = JSON.obj().set("k", JSON.of(1)); + assert(ob.has("k")); + assert(!ob.has("z")); + assert(!JSON.nul().has("k")); + // get: found, not found, non-object + assert(ob.get("k").asI64() == 1); + assert(ob.get("z").isNull()); + assert(JSON.nul().get("k").isNull()); + // objectKeys: object vs non-object + assert(ob.objectKeys().length == 1); + assert(JSON.nul().objectKeys().length == 0); +} + +export function runAll(): void { + testFactoriesAndKinds(); + testToString(); + testStringify(); + testQuoteEscapes(); + testParseValues(); + testParseErrors(); + testAccessors(); +} diff --git a/tests/json/run.mjs b/tests/json/run.mjs new file mode 100644 index 0000000000..695528687f --- /dev/null +++ b/tests/json/run.mjs @@ -0,0 +1,57 @@ +// Compile tests/json/json.spec.ts with the local toilscript (so the JSON global +// is in scope), instantiate it, run runAll(), and report. A failing `assert` +// aborts with its source line, which is surfaced here. +import { readFileSync, mkdtempSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const spec = join(here, "json.spec.ts"); +const tmp = mkdtempSync(join(tmpdir(), "jsontest-")); +const out = join(tmp, "spec.wasm"); + +const compile = spawnSync( + "node", + [join(root, "bin", "toilscript.js"), spec, "-o", out, "--runtime", "stub"], + { stdio: "inherit" }, +); +if (compile.status !== 0) { + console.error("JSON test suite: COMPILE FAILED"); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +let memory = null; +function readString(ptr) { + if (!ptr || !memory) return ""; + const u32 = new Uint32Array(memory.buffer); + const len = u32[(ptr - 4) >>> 2]; + const u16 = new Uint16Array(memory.buffer, ptr, len >>> 1); + return String.fromCharCode.apply(null, u16); +} + +const imports = { + env: { + abort(msgPtr, filePtr, line, col) { + const msg = readString(msgPtr); + throw new Error(`assert failed at json.spec.ts:${line}:${col}${msg ? " (" + msg + ")" : ""}`); + }, + }, +}; + +try { + const { instance } = await WebAssembly.instantiate(readFileSync(out), imports); + memory = instance.exports.memory; + instance.exports.runAll(); + console.log("JSON test suite: ALL PASS"); +} catch (e) { + console.error("JSON test suite: FAIL"); + console.error(String(e.message || e)); + rmSync(tmp, { recursive: true, force: true }); + process.exit(1); +} + +rmSync(tmp, { recursive: true, force: true }); diff --git a/tests/parser.js b/tests/parser.js index 687059529a..d81c6c3393 100644 --- a/tests/parser.js +++ b/tests/parser.js @@ -6,7 +6,7 @@ import { globSync } from "glob"; import { diff } from "../util/text.js"; import { stdoutColors } from "../util/terminal.js"; import * as optionsUtil from "../util/options.js"; -import { Program, Options, ASTBuilder, Feature } from "../dist/assemblyscript.js"; +import { Program, Options, ASTBuilder, Feature } from "../dist/toilscript.js"; const dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/tests/streams/catalog.mjs b/tests/streams/catalog.mjs new file mode 100644 index 0000000000..fff1302662 --- /dev/null +++ b/tests/streams/catalog.mjs @@ -0,0 +1,424 @@ +// Byte-level tests for the streams + daemon metadata custom sections (spec 03 +// sections 6/7/8, the Part 5 FROZEN byte layouts of toil.surface, +// toilstream.catalog, toildaemon.catalog). Compiles small fixtures under an +// explicit --targetMode, extracts the named custom sections from the emitted +// wasm, decodes them, and asserts the exact field values. Mirrors the +// tests/dbstatic catalog-decode style. +import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const bin = join(root, "bin", "toilscript.js"); + +let failures = 0; +function check(name, cond, detail) { + if (cond) { console.log(` ok ${name}`); } + else { failures++; console.error(` FAIL ${name}${detail ? ": " + detail : ""}`); } +} + +// Compile `source` under `mode`, return { status, output, wasm:Buffer|null }. +function compile(source, mode) { + const tmp = mkdtempSync(join(tmpdir(), "streamcat-")); + const app = join(tmp, "app.ts"); + const out = join(tmp, "out.wasm"); + writeFileSync(app, source); + const args = [bin, app, "-o", out, "--runtime", "stub"]; + if (mode != null) args.push("--targetMode", mode); + const r = spawnSync("node", args, { encoding: "utf8" }); + let wasm = null; + try { wasm = readFileSync(out); } catch { /* no output on failure */ } + rmSync(tmp, { recursive: true, force: true }); + return { status: r.status, output: (r.stdout || "") + (r.stderr || ""), wasm }; +} + +// --- wasm custom-section extraction (the hostile-safe walker, mirrors host) --- +function leb(buf, pos) { + let result = 0, shift = 0, p = pos; + for (;;) { + const b = buf[p++]; + result |= (b & 0x7f) << shift; + if ((b & 0x80) === 0) break; + shift += 7; + } + return [result >>> 0, p]; +} +function findSection(buf, wanted) { + let pos = 8; // past "\0asm" magic + version u32 + while (pos < buf.length) { + const id = buf[pos++]; + let size; [size, pos] = leb(buf, pos); + const end = pos + size; + if (id === 0) { // custom section + let nameLen, np; [nameLen, np] = leb(buf, pos); + if (buf.toString("latin1", np, np + nameLen) === wanted) { + return buf.subarray(np + nameLen, end); + } + } + pos = end; + } + return null; +} + +// A little-endian byte reader over a section payload. +function reader(p) { + let pos = 0; + return { + u8: () => p[pos++], + u16: () => { const v = p[pos] | (p[pos + 1] << 8); pos += 2; return v; }, + u32: () => { const v = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; pos += 4; return v; }, + // u64 as { lo, hi } (precision-safe; the cron minute mask spans bits 0..59). + u64: () => { const lo = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; const hi = (p[pos + 4] | (p[pos + 5] << 8) | (p[pos + 6] << 16) | (p[pos + 7] << 24)) >>> 0; pos += 8; return { lo, hi }; }, + // u64 as a JS number (safe for values < 2^53, e.g. interval_ms / gas_hint). + u64n: () => { const lo = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; const hi = (p[pos + 4] | (p[pos + 5] << 8) | (p[pos + 6] << 16) | (p[pos + 7] << 24)) >>> 0; pos += 8; return hi * 4294967296 + lo; }, + str: () => { const n = (p[pos] | (p[pos + 1] << 8) | (p[pos + 2] << 16) | (p[pos + 3] << 24)) >>> 0; pos += 4; const s = p.toString("utf8", pos, pos + n); pos += n; return s; }, + rest: () => p.length - pos, + }; +} + +// FNV-1a helpers (mirror dbcatalog.ts: value_data_id and recursive schema_version). +const fnvByte = (h, b) => Math.imul(h ^ (b & 0xff), 0x01000193) >>> 0; +function fnvStr(h, s) { + const n = s.length; + h = fnvByte(h, n & 0xff); h = fnvByte(h, (n >>> 8) & 0xff); + h = fnvByte(h, (n >>> 16) & 0xff); h = fnvByte(h, (n >>> 24) & 0xff); + for (let i = 0; i < n; i++) h = fnvByte(h, s.charCodeAt(i)); + return h >>> 0; +} +function layoutHash(fields) { // flat (no nested @data) layout hash + let h = 0x811c9dc5; + for (const f of fields) { h = fnvStr(h, f.name); h = fnvStr(h, f.typeName); h = fnvByte(h, f.isArray ? 1 : 0); } + return h >>> 0; +} +const fnv1a = (s) => { let h = 0x811c9dc5; for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 0x01000193) >>> 0; return h >>> 0; }; + +console.log("streams + daemon catalog byte layout (spec 03 sections 6/7/8):"); + +// =========================================================================== +// 1. toilstream.catalog: a two-stream hot project (one raw regional, one typed +// continental via @stream({ message: ChatMsg })). +// =========================================================================== +{ + const src = ` +@data +class ChatMsg { text: string = ""; ts: i32 = 0; } +@stream +class Chat { + @connect onConnect(): void {} + @message onMessage(): void {} +} +@stream({ name: "presence", scope: StreamScope.Continental, maxFrameBytes: 65536, ingressRingBytes: 131072, message: ChatMsg }) +class Presence { + @message onMessage(p: ChatMsg): void {} + @close onClose(): void {} + @disconnect onDisconnect(): void {} +} +export function probe(): i32 { return 1; } +`; + const { status, output, wasm } = compile(src, "hot"); + check("hot stream project compiles", status === 0, `status ${status}\n${output}`); + if (status === 0 && wasm) { + const sec = findSection(wasm, "toilstream.catalog"); + check("toilstream.catalog present", sec !== null); + if (sec) { + const r = reader(sec); + check("stream format_version=1", r.u16() === 1); + const n = r.u16(); + check("n_streams=2", n === 2, `got ${n}`); + const streams = []; + for (let i = 0; i < n; i++) { + streams.push({ + name: r.str(), route: r.str(), + hookMask: r.u8(), scope: r.u8(), mode: r.u8(), + maxFrame: r.u32(), ringBytes: r.u32(), + valueDataId: r.u32(), schemaVersion: r.u32(), + index: r.u16(), + }); + } + const chat = streams.find((s) => s.name === "Chat"); + const pres = streams.find((s) => s.name === "presence"); + check("Chat declared name = class name", !!chat); + check("Presence declared name from config 'name'", !!pres); + if (chat) { + check("Chat route '/Chat'", chat.route === "/Chat", chat.route); + // connect(bit0) + message(bit1) = 0b0011 = 3 + check("Chat hook bitmask = 3 (connect|message)", chat.hookMask === 3, `${chat.hookMask}`); + check("Chat scope = 0 (regional)", chat.scope === 0); + check("Chat message_mode = 0 (raw)", chat.mode === 0); + check("Chat max_frame_bytes = 0 (plan default)", chat.maxFrame === 0); + check("Chat ingress_ring_bytes = 0", chat.ringBytes === 0); + check("Chat value_data_id = 0 (raw)", chat.valueDataId === 0); + check("Chat message_schema_version = 0 (raw)", chat.schemaVersion === 0); + check("Chat stream_index = 0", chat.index === 0); + } + if (pres) { + check("Presence route '/presence'", pres.route === "/presence", pres.route); + // message(bit1) + close(bit2) + disconnect(bit3) = 0b1110 = 14 + check("Presence hook bitmask = 14 (message|close|disconnect)", pres.hookMask === 14, `${pres.hookMask}`); + check("Presence scope = 1 (continental)", pres.scope === 1); + check("Presence message_mode = 1 (typed)", pres.mode === 1); + check("Presence max_frame_bytes = 65536", pres.maxFrame === 65536, `${pres.maxFrame}`); + check("Presence ingress_ring_bytes = 131072", pres.ringBytes === 131072, `${pres.ringBytes}`); + check("Presence value_data_id = fnv1a('ChatMsg')", pres.valueDataId === fnv1a("ChatMsg"), `${pres.valueDataId}`); + const expectedSV = layoutHash([{ name: "text", typeName: "string", isArray: false }, { name: "ts", typeName: "i32", isArray: false }]); + check("Presence message_schema_version = layoutHash(ChatMsg)", pres.schemaVersion === expectedSV, `${pres.schemaVersion} != ${expectedSV}`); + check("Presence value_data_id != schema_version", pres.valueDataId !== pres.schemaVersion); + check("Presence stream_index = 1", pres.index === 1); + } + } + } +} + +// =========================================================================== +// 2. toildaemon.catalog: a @daemon with one interval task and one cron task. +// =========================================================================== +{ + const src = ` +@daemon +class Jobs { + @scheduled("30s") fast(): void {} + @scheduled("0 */6 * * *") sixHourly(): void {} +} +export function probe(): i32 { return 1; } +`; + const { status, output, wasm } = compile(src, "cold"); + check("cold daemon project compiles", status === 0, `status ${status}\n${output}`); + if (status === 0 && wasm) { + const sec = findSection(wasm, "toildaemon.catalog"); + check("toildaemon.catalog present", sec !== null); + if (sec) { + const r = reader(sec); + check("daemon format_version=1", r.u16() === 1); + check("has_daemon=1", r.u8() === 1); + const n = r.u16(); + check("n_scheduled=2", n === 2, `${n}`); + const tasks = []; + for (let i = 0; i < n; i++) { + tasks.push({ + name: r.str(), index: r.u16(), kind: r.u8(), + intervalMs: r.u64n(), + minute: r.u64(), hour: r.u32(), dom: r.u32(), + month: r.u16(), dow: r.u8(), + overlap: r.u8(), catchup: r.u8(), gas: r.u64n(), + }); + } + const fast = tasks[0], cron = tasks[1]; + // interval task + check("task0 name 'fast'", fast.name === "fast", fast.name); + check("task0 task_index = 0", fast.index === 0); + check("task0 schedule_kind = 0 (interval)", fast.kind === 0); + check("task0 interval_ms = 30000", fast.intervalMs === 30000, `${fast.intervalMs}`); + check("task0 cron minute mask = 0", fast.minute.lo === 0 && fast.minute.hi === 0); + check("task0 cron hour mask = 0", fast.hour === 0); + check("task0 overlap_policy = 0", fast.overlap === 0); + check("task0 catchup_policy = 0", fast.catchup === 0); + check("task0 gas_hint = 0", fast.gas === 0); + // cron task "0 */6 * * *" -> minute {0}, hour {0,6,12,18}, dom all 1..31, + // month all 1..12, dow all 0..6 + check("task1 name 'sixHourly'", cron.name === "sixHourly", cron.name); + check("task1 task_index = 1", cron.index === 1); + check("task1 schedule_kind = 1 (cron)", cron.kind === 1); + check("task1 interval_ms = 0", cron.intervalMs === 0); + check("task1 minute mask = bit0 only", cron.minute.lo === 1 && cron.minute.hi === 0, `lo=${cron.minute.lo} hi=${cron.minute.hi}`); + // hours 0,6,12,18 -> bits 0,6,12,18 -> (1<<0)|(1<<6)|(1<<12)|(1<<18) + const expHour = (1 << 0) | (1 << 6) | (1 << 12) | (1 << 18); + check("task1 hour mask = {0,6,12,18}", cron.hour === (expHour >>> 0), `${cron.hour} != ${expHour >>> 0}`); + // dom * over 1..31 -> bits 1..31 set + let expDom = 0; for (let b = 1; b <= 31; b++) expDom |= (1 << b); + check("task1 dom mask = bits 1..31", cron.dom === (expDom >>> 0), `${cron.dom}`); + // month * over 1..12 -> bits 1..12 + let expMonth = 0; for (let b = 1; b <= 12; b++) expMonth |= (1 << b); + check("task1 month mask = bits 1..12", cron.month === (expMonth & 0xffff), `${cron.month}`); + // dow * over 0..6 -> bits 0..6 = 0x7f + check("task1 dow mask = bits 0..6 (0x7f)", cron.dow === 0x7f, `${cron.dow}`); + } + } +} + +// =========================================================================== +// 3. More cron forms: ranges, lists, steps. "15 0 * * 1-5" and "0,30 * * * *". +// =========================================================================== +{ + const src = ` +@daemon +class Jobs { + @scheduled("15 0 * * 1-5") weekdayMorning(): void {} + @scheduled("0,30 * * * *") halfHourly(): void {} +} +export function probe(): i32 { return 1; } +`; + const { status, wasm } = compile(src, "cold"); + check("cron range/list project compiles", status === 0); + if (status === 0 && wasm) { + const r = reader(findSection(wasm, "toildaemon.catalog")); + r.u16(); r.u8(); const n = r.u16(); + const tasks = []; + for (let i = 0; i < n; i++) { + tasks.push({ name: r.str(), index: r.u16(), kind: r.u8(), intervalMs: r.u64n(), minute: r.u64(), hour: r.u32(), dom: r.u32(), month: r.u16(), dow: r.u8(), overlap: r.u8(), catchup: r.u8(), gas: r.u64n() }); + } + const wd = tasks[0], hh = tasks[1]; + // "15 0 * * 1-5": minute {15}, hour {0}, dow {1,2,3,4,5} + check("weekday minute = {15}", wd.minute.lo === (1 << 15) && wd.minute.hi === 0, `lo=${wd.minute.lo}`); + check("weekday hour = {0}", wd.hour === 1); + let expDow = 0; for (let b = 1; b <= 5; b++) expDow |= (1 << b); + check("weekday dow = {1..5}", wd.dow === expDow, `${wd.dow}`); + // "0,30 * * * *": minute {0,30} + check("halfHourly minute = {0,30}", hh.minute.lo === ((1 << 0) | (1 << 30)) >>> 0 && hh.minute.hi === 0, `lo=${hh.minute.lo}`); + } +} + +// =========================================================================== +// 4. Invalid @scheduled specs fire diagnostics 9011 / 9010 (not byte output). +// =========================================================================== +{ + const bad = compile(` +@daemon +class Jobs { @scheduled("30x") t(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("bad interval '30x' rejected (9011)", bad.status !== 0 && /is not a valid interval or cron/.test(bad.output), bad.output.slice(0, 200)); + + const oob = compile(` +@daemon +class Jobs { @scheduled("60 * * * *") t(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("cron minute out-of-range '60 * * * *' rejected", oob.status !== 0 && /is not a valid interval or cron/.test(oob.output)); + + const fewFields = compile(` +@daemon +class Jobs { @scheduled("* * *") t(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("cron too-few-fields '* * *' rejected", fewFields.status !== 0 && /is not a valid interval or cron/.test(fewFields.output)); + + const tooFast = compile(` +@daemon +class Jobs { @scheduled("0s") t(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("interval '0s' (< 1s floor) rejected", tooFast.status !== 0 && /is not a valid interval or cron/.test(tooFast.output)); +} + +// =========================================================================== +// 5. toil.surface: hot (rest+stream), cold (daemon+scheduled+database), legacy. +// =========================================================================== +function readSurface(sec) { + const r = reader(sec); + return { + formatVersion: r.u16(), targetMode: r.u8(), reserved0: r.u8(), + surfaceFlags: r.u32(), abiVersion: r.u16(), buildId: r.str(), + fingerprint: r.u32(), dataCoherence: r.u32(), pairCoherence: r.u32(), + trailing: r.rest(), + }; +} +{ + // hot: @rest + @stream + @database -> bits rest(1) | stream(2) | database(16) = 19 + const hotSrc = ` +@data +class Pong { msg: string = "pong"; } +@database +class Db { @collection items: Documents = new Documents(); } +@rest +class Api { @get ping(): Pong { return new Pong(); } } +@stream +class Chat { @message onMessage(): void {} } +export function probe(): i32 { return 1; } +`; + const hot = compile(hotSrc, "hot"); + check("hot surface project compiles", hot.status === 0, hot.output); + if (hot.status === 0 && hot.wasm) { + const s = readSurface(findSection(hot.wasm, "toil.surface")); + check("surface format_version=1", s.formatVersion === 1); + check("surface target_mode=0 (hot)", s.targetMode === 0); + check("surface reserved0=0", s.reserved0 === 0); + check("surface flags = rest|stream|database = 0x13", s.surfaceFlags === 0x13, `0x${s.surfaceFlags.toString(16)}`); + check("surface abi_version=1", s.abiVersion === 1); + check("surface build_id empty", s.buildId === ""); + check("surface exactly 12 trailing bytes consumed (no extra)", s.trailing === 0, `${s.trailing}`); + } + + // cold: @daemon + @scheduled + @database -> daemon(4)|scheduled(8)|database(16) = 28 + const coldSrc = ` +@data +class Pong { msg: string = "pong"; } +@database +class Db { @collection items: Documents = new Documents(); } +@daemon +class Jobs { @scheduled("5m") t(): void {} } +export function probe(): i32 { return 1; } +`; + const cold = compile(coldSrc, "cold"); + check("cold surface project compiles", cold.status === 0, cold.output); + let coldSurface = null; + if (cold.status === 0 && cold.wasm) { + coldSurface = readSurface(findSection(cold.wasm, "toil.surface")); + check("cold surface target_mode=1", coldSurface.targetMode === 1); + check("cold surface flags = daemon|scheduled|database = 0x1c", coldSurface.surfaceFlags === 0x1c, `0x${coldSurface.surfaceFlags.toString(16)}`); + } + + // Cross-pass coherence: hot and cold over the SAME shared @data surface must + // produce IDENTICAL data_coherence_hash and pair_coherence_hash. + if (hot.status === 0 && hot.wasm && coldSurface) { + const hs = readSurface(findSection(hot.wasm, "toil.surface")); + check("data_coherence_hash identical hot vs cold", hs.dataCoherence === coldSurface.dataCoherence, `${hs.dataCoherence} != ${coldSurface.dataCoherence}`); + check("pair_coherence_hash identical hot vs cold", hs.pairCoherence === coldSurface.pairCoherence, `${hs.pairCoherence} != ${coldSurface.pairCoherence}`); + check("fingerprint differs hot vs cold (mode-distinguished)", hs.fingerprint !== coldSurface.fingerprint); + } + + // legacy (null mode): toil.surface is ALWAYS emitted (Part 5 / doc 02 AN-2), + // stamped as hot (target_mode=0). NO toilstream/toildaemon catalog. + const legacySrc = ` +@rest +class Api { @get ping(): i32 { return 1; } } +export function probe(): i32 { return 1; } +`; + const legacy = compile(legacySrc, null); + check("legacy project compiles", legacy.status === 0, legacy.output); + if (legacy.status === 0 && legacy.wasm) { + const sec = findSection(legacy.wasm, "toil.surface"); + check("legacy toil.surface IS emitted (Part 5)", sec !== null); + if (sec) { + const s = readSurface(sec); + check("legacy target_mode=0 (hot)", s.targetMode === 0); + check("legacy flags has rest bit", (s.surfaceFlags & 0x01) === 0x01); + } + check("legacy has no toilstream.catalog", findSection(legacy.wasm, "toilstream.catalog") === null); + check("legacy has no toildaemon.catalog", findSection(legacy.wasm, "toildaemon.catalog") === null); + } +} + +// =========================================================================== +// 6. Section presence/exclusion per mode. +// =========================================================================== +{ + // hot @stream -> stream catalog present, daemon catalog absent. + const hot = compile(` +@stream +class Chat { @message onMessage(): void {} } +export function probe(): i32 { return 1; } +`, "hot"); + if (hot.status === 0 && hot.wasm) { + check("hot emits toilstream.catalog", findSection(hot.wasm, "toilstream.catalog") !== null); + check("hot omits toildaemon.catalog", findSection(hot.wasm, "toildaemon.catalog") === null); + } + // cold @daemon -> daemon catalog present, stream catalog absent. + const cold = compile(` +@daemon +class Jobs { @scheduled("1m") t(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + if (cold.status === 0 && cold.wasm) { + check("cold emits toildaemon.catalog", findSection(cold.wasm, "toildaemon.catalog") !== null); + check("cold omits toilstream.catalog", findSection(cold.wasm, "toilstream.catalog") === null); + } +} + +if (failures) { + console.error(`\nstreams catalog: ${failures} failure(s)`); + process.exit(1); +} +console.log("\nstreams catalog: all cases passed"); diff --git a/tests/streams/codegen.mjs b/tests/streams/codegen.mjs new file mode 100644 index 0000000000..de2677d03a --- /dev/null +++ b/tests/streams/codegen.mjs @@ -0,0 +1,237 @@ +// Codegen tests for the @daemon / @scheduled COLD exports (spec 03 sections 5.2 / +// 5.6 / 5.7, Reconciliation Part 2: `daemon_start() -> i32`, +// `scheduled_tick(i32 task_id) -> i64`). This is the THIRD increment: the cold +// artifact exports synthesized by `injectDaemonHandler` and the daemon-side +// front-end checks (9012 handler signature, 9008 no-scheduled-tasks warning). +// +// It compiles @daemon fixtures under --targetMode cold, asserts the emitted +// module EXPORTS `daemon_start` + `scheduled_tick`, instantiates the wasm and +// drives the exports to prove `scheduled_tick(task_id)` dispatches to the method +// the `toildaemon.catalog` assigned that task_index to (the lockstep contract), +// and asserts the 9012 / 9008 diagnostics fire. Mirrors the run.mjs / catalog.mjs +// harness style (spawn the local toilscript bin, inspect status / output / wasm). +import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const bin = join(root, "bin", "toilscript.js"); + +let failures = 0; +function check(name, cond, detail) { + if (cond) { console.log(` ok ${name}`); } + else { failures++; console.error(` FAIL ${name}${detail ? ": " + detail : ""}`); } +} + +// Compile `source` under `mode`, return { status, output, wasm:Buffer|null, exports:string[] }. +function compile(source, mode) { + const tmp = mkdtempSync(join(tmpdir(), "daemoncg-")); + const app = join(tmp, "app.ts"); + const out = join(tmp, "out.wasm"); + writeFileSync(app, source); + const args = [bin, app, "-o", out, "--runtime", "stub"]; + if (mode != null) args.push("--targetMode", mode); + const r = spawnSync("node", args, { encoding: "utf8" }); + let wasm = null; + try { wasm = readFileSync(out); } catch { /* no output on failure */ } + rmSync(tmp, { recursive: true, force: true }); + return { status: r.status, output: (r.stdout || "") + (r.stderr || ""), wasm, exports: wasm ? wasmExports(wasm) : [] }; +} + +// --- wasm export-section walker (the hostile-safe parser; mirrors the host) --- +function leb(buf, pos) { + let result = 0, shift = 0, p = pos; + for (;;) { const b = buf[p++]; result |= (b & 0x7f) << shift; if ((b & 0x80) === 0) break; shift += 7; } + return [result >>> 0, p]; +} +// Return the list of EXPORTED names (export section, id = 7). +function wasmExports(buf) { + let pos = 8; // past "\0asm" magic + version u32 + const names = []; + while (pos < buf.length) { + const id = buf[pos++]; + let size; [size, pos] = leb(buf, pos); + const end = pos + size; + if (id === 7) { // export section + let count, p = pos; [count, p] = leb(buf, p); + for (let i = 0; i < count; i++) { + let nlen; [nlen, p] = leb(buf, p); + names.push(buf.toString("utf8", p, p + nlen)); + p += nlen; + p += 1; // export kind byte + let idx; [idx, p] = leb(buf, p); // export index + } + } + pos = end; + } + return names; +} + +// toildaemon.catalog reader (just enough to recover the task_index ordering). +function findSection(buf, wanted) { + let pos = 8; + while (pos < buf.length) { + const id = buf[pos++]; + let size; [size, pos] = leb(buf, pos); + const end = pos + size; + if (id === 0) { + let nl, np; [nl, np] = leb(buf, pos); + if (buf.toString("latin1", np, np + nl) === wanted) return buf.subarray(np + nl, end); + } + pos = end; + } + return null; +} +function catalogTaskOrder(buf) { + const sec = findSection(buf, "toildaemon.catalog"); + if (!sec) return null; + let pos = 0; + const u16 = () => { const v = sec[pos] | (sec[pos + 1] << 8); pos += 2; return v; }; + const u8 = () => sec[pos++]; + const u32 = () => { pos += 4; }; + const u64 = () => { pos += 8; }; + const str = () => { const n = (sec[pos] | (sec[pos + 1] << 8) | (sec[pos + 2] << 16) | (sec[pos + 3] << 24)) >>> 0; pos += 4; const s = sec.toString("utf8", pos, pos + n); pos += n; return s; }; + u16(); u8(); const n = u16(); + const tasks = []; + for (let i = 0; i < n; i++) { + const name = str(); const idx = u16(); u8(); u64(); u64(); u32(); u32(); u16(); u8(); u8(); u8(); u64(); + tasks.push({ name, idx }); + } + return tasks; +} + +// Instantiate a stub-runtime cold module with a minimal `env`. +function instantiate(wasm) { + const imports = { env: { abort: () => { throw new Error("wasm abort"); }, trace: () => {}, seed: () => Date.now() } }; + return new WebAssembly.Instance(new WebAssembly.Module(wasm), imports).exports; +} + +console.log("daemon cold-export codegen (spec 03 sections 5.2/5.6/5.7):"); + +// =========================================================================== +// 1. A @daemon with 2+ @scheduled tasks EXPORTS daemon_start + scheduled_tick. +// =========================================================================== +{ + const src = ` +@daemon +class Jobs { + onStart(): void {} + @scheduled("30s") fast(): void {} + @scheduled("0 */6 * * *") sixHourly(): void {} +} +export function probe(): i32 { return 1; } +`; + const r = compile(src, "cold"); + check("cold @daemon (2 tasks) compiles", r.status === 0, `status ${r.status}\n${r.output}`); + check("exports daemon_start", r.exports.includes("daemon_start"), r.exports.join(",")); + check("exports scheduled_tick", r.exports.includes("scheduled_tick"), r.exports.join(",")); + check("does NOT export a separate init (folded into daemon_start)", !r.exports.includes("init")); +} + +// =========================================================================== +// 2. scheduled_tick(task_id) dispatches to the method the catalog task_index +// names, in source-declaration order (the lockstep contract). Verified by +// actually invoking the emitted wasm. +// =========================================================================== +{ + const src = ` +let __log: i32 = 0; +let __started: i32 = 0; +export function logv(): i32 { return __log; } +export function started(): i32 { return __started; } +@daemon +class Jobs { + private seq: i32 = 100; + onStart(): void { __started = __started + 1; this.seq = 200; } + @scheduled("30s") alpha(): void { __log = this.seq + 0; } // task 0 + @scheduled("5m") beta(): void { __log = this.seq + 1; } // task 1 + @scheduled("0 0 * * *") gamma(): void { __log = this.seq + 2; } // task 2 +} +export function probe(): i32 { return 1; } +`; + const r = compile(src, "cold"); + check("cold @daemon (3 tasks) compiles", r.status === 0, r.output); + if (r.status === 0 && r.wasm) { + const order = catalogTaskOrder(r.wasm); + check("catalog task order = alpha,beta,gamma", + !!order && order.map((t) => `${t.idx}:${t.name}`).join(",") === "0:alpha,1:beta,2:gamma", + order ? order.map((t) => `${t.idx}:${t.name}`).join(",") : "no catalog"); + const ex = instantiate(r.wasm); + const startRc = ex.daemon_start(); // i32 -> JS Number; call ONCE + check("daemon_start() returns 0", startRc === 0, `${startRc}`); + check("onStart ran exactly once after daemon_start", ex.started() === 1, `${ex.started()}`); + // Each tick reads instance.seq (200, set by onStart). If a fresh instance + // were created per tick, seq would be the field initializer 100 since + // onStart never re-runs. So 200+idx proves the single box-lifetime + // instance is reused AND that task_id maps to the catalog's method. + for (const t of order) { + ex.scheduled_tick(t.idx); + check(`scheduled_tick(${t.idx}) dispatches ${t.name} (log=${200 + t.idx})`, + ex.logv() === 200 + t.idx, `log=${ex.logv()}`); + } + check("onStart still ran once (single instance across ticks)", ex.started() === 1, `${ex.started()}`); + // Out-of-range task id is a safe no-op (no dispatch arm matches). + const before = ex.logv(); + ex.scheduled_tick(99); + check("scheduled_tick(out-of-range) is a no-op", ex.logv() === before); + } +} + +// =========================================================================== +// 3. 9012: a @scheduled handler must take no arguments and return void. +// =========================================================================== +{ + const withArg = compile(` +@daemon +class Jobs { @scheduled("30s") bad(x: i32): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("9012: @scheduled with an argument rejected", + withArg.status !== 0 && /must take no arguments and return void/.test(withArg.output), + withArg.output.slice(0, 200)); + + const nonVoid = compile(` +@daemon +class Jobs { @scheduled("30s") bad(): i32 { return 1; } } +export function probe(): i32 { return 1; } +`, "cold"); + check("9012: @scheduled with non-void return rejected", + nonVoid.status !== 0 && /must take no arguments and return void/.test(nonVoid.output), + nonVoid.output.slice(0, 200)); + + // A correct void/no-arg handler must NOT trip 9012. + const good = compile(` +@daemon +class Jobs { @scheduled("30s") ok(): void {} } +export function probe(): i32 { return 1; } +`, "cold"); + check("valid void/no-arg @scheduled does NOT trip 9012", + good.status === 0 && !/must take no arguments and return void/.test(good.output), good.output.slice(0, 200)); +} + +// =========================================================================== +// 4. 9008: a @daemon with zero @scheduled tasks is a WARNING (compiles), and +// still emits daemon_start + scheduled_tick (the daemon may run only onStart). +// =========================================================================== +{ + const r = compile(` +@daemon +class Loop { + onStart(): void {} +} +export function probe(): i32 { return 1; } +`, "cold"); + check("9008: zero-@scheduled @daemon WARNS but compiles", + r.status === 0 && /declares no scheduled tasks/.test(r.output), `status ${r.status}\n${r.output}`); + check("zero-task daemon still exports daemon_start", r.exports.includes("daemon_start")); + check("zero-task daemon still exports scheduled_tick", r.exports.includes("scheduled_tick")); +} + +if (failures) { + console.error(`\ndaemon codegen: ${failures} failure(s)`); + process.exit(1); +} +console.log("\ndaemon codegen: all cases passed"); diff --git a/tests/streams/run.mjs b/tests/streams/run.mjs new file mode 100644 index 0000000000..9bb820c67e --- /dev/null +++ b/tests/streams/run.mjs @@ -0,0 +1,148 @@ +// Front-end gating tests for the streams + daemon decorators (spec 03 phase 0). +// Compiles small fixtures with the local toilscript under an explicit --targetMode +// and asserts on the exit status and the emitted diagnostic identifiers. This is the +// FIRST increment: AST kinds, DecoratorFlags bits, the hot/cold target mode, and the +// decorator gating. Codegen / catalog emission are later increments and not exercised. +import { mkdtempSync, writeFileSync, rmSync, openSync, closeSync, readFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { spawnSync } from "node:child_process"; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, "..", ".."); +const bin = join(root, "bin", "toilscript.js"); + +let failures = 0; + +// Compile `source` under the given mode ("hot"/"cold"/null) and return { status, output }. +function compile(source, mode) { + const tmp = mkdtempSync(join(tmpdir(), "streams-")); + const app = join(tmp, "app.ts"); + const out = join(tmp, "out.wasm"); + const log = join(tmp, "compile.log"); + writeFileSync(app, source); + const args = [bin, app, "-o", out, "--runtime", "stub"]; + if (mode != null) args.push("--targetMode", mode); + const logFd = openSync(log, "w"); + const r = spawnSync("node", ["--enable-source-maps", ...args], { + stdio: ["ignore", logFd, logFd], + }); + closeSync(logFd); + const output = readFileSync(log, "utf8"); + rmSync(tmp, { recursive: true, force: true }); + return { status: r.status, output }; +} + +// Assert the compile SUCCEEDS (exit 0). +function expectPass(name, source, mode) { + const { status, output } = compile(source, mode); + if (status === 0) { + console.log(` ok ${name}`); + } else { + failures++; + console.error(` FAIL ${name}: expected success, got status ${status}\n${output}`); + } +} + +// Assert the compile FAILS (non-zero) and the output contains `needle`. +function expectFail(name, source, mode, needle) { + const { status, output } = compile(source, mode); + if (status !== 0 && output.includes(needle)) { + console.log(` ok ${name}`); + } else { + failures++; + console.error(` FAIL ${name}: expected failure containing '${needle}', got status ${status}\n${output}`); + } +} + +console.log("streams + daemon gating (spec 03 phase 0):"); + +// --- should-pass cases ------------------------------------------------------- + +// A valid @daemon with a @scheduled method compiles in cold mode. +expectPass("cold: @daemon + @scheduled", ` +@daemon +class Jobs { + @scheduled("30s") tick(): void {} +} +export function probe(): i32 { return 1; } +`, "cold"); + +// A valid @stream class with a lifecycle hook compiles in hot mode. +expectPass("hot: @stream + @message hook", ` +@stream +class Chat { + @message onMessage(): void {} +} +export function probe(): i32 { return 1; } +`, "hot"); + +// A @stream project with no @service/@remote compiles in hot mode. +expectPass("hot: @stream without service/remote", ` +@stream +class Chat { @connect onConnect(): void {} } +export function probe(): i32 { return 1; } +`, "hot"); + +// Back-compat: an existing @rest controller still compiles under legacy (null) mode. +expectPass("legacy: @rest controller still compiles", ` +@data +class Pong { msg: string = "pong"; } +@rest +class Api { @get ping(): Pong { return new Pong(); } } +export function probe(): i32 { return 1; } +`, null); + +// --- should-fail cases ------------------------------------------------------- + +// @scheduled (and @daemon) are forbidden in the hot request artifact. +expectFail("hot: @scheduled forbidden", ` +class NotADaemon { + @scheduled("30s") tick(): void {} +} +export function probe(): i32 { return 1; } +`, "hot", "is not valid in the hot request artifact"); + +// @stream is forbidden in the cold daemon artifact. +expectFail("cold: @stream forbidden", ` +@stream +class Chat { @message onMessage(): void {} } +export function probe(): i32 { return 1; } +`, "cold", "is not valid in the cold daemon artifact"); + +// A unit using @stream cannot also declare @remote anywhere (project-wide). +expectFail("hot: @stream + @remote excluded", ` +@stream +class Chat { @message onMessage(): void {} } +@remote +export function rpc(): i32 { return 1; } +`, "hot", "cannot declare"); + +// At most one @daemon class per project. +expectFail("cold: two @daemon classes", ` +@daemon +class A { @scheduled("1m") a(): void {} } +@daemon +class B { @scheduled("1m") b(): void {} } +export function probe(): i32 { return 1; } +`, "cold", "Only one '@daemon' class is allowed"); + +// @scheduled is only valid on a method inside a @daemon class. +expectFail("cold: @scheduled outside @daemon", ` +class Plain { @scheduled("1m") a(): void {} } +export function probe(): i32 { return 1; } +`, "cold", "only valid inside a '@daemon' class"); + +// Legacy (null) mode rejects the new cold-only @daemon with the generic message. +expectFail("legacy: @daemon rejected", ` +@daemon +class Jobs { @scheduled("30s") tick(): void {} } +export function probe(): i32 { return 1; } +`, null, "is not valid here"); + +if (failures) { + console.error(`\nstreams gating: ${failures} failure(s)`); + process.exit(1); +} +console.log("\nstreams gating: all cases passed"); diff --git a/tests/asconfig/.gitignore b/tests/toilconfig/.gitignore similarity index 100% rename from tests/asconfig/.gitignore rename to tests/toilconfig/.gitignore diff --git a/tests/asconfig/complicated/assembly/index.ts b/tests/toilconfig/complicated/assembly/index.ts similarity index 100% rename from tests/asconfig/complicated/assembly/index.ts rename to tests/toilconfig/complicated/assembly/index.ts diff --git a/tests/asconfig/complicated/package.json b/tests/toilconfig/complicated/package.json similarity index 100% rename from tests/asconfig/complicated/package.json rename to tests/toilconfig/complicated/package.json diff --git a/tests/asconfig/complicated/asconfig.json b/tests/toilconfig/complicated/toilconfig.json similarity index 100% rename from tests/asconfig/complicated/asconfig.json rename to tests/toilconfig/complicated/toilconfig.json diff --git a/tests/asconfig/cyclical/assembly/index.ts b/tests/toilconfig/cyclical/assembly/index.ts similarity index 100% rename from tests/asconfig/cyclical/assembly/index.ts rename to tests/toilconfig/cyclical/assembly/index.ts diff --git a/tests/toilconfig/cyclical/extends.json b/tests/toilconfig/cyclical/extends.json new file mode 100644 index 0000000000..9d66d5f57a --- /dev/null +++ b/tests/toilconfig/cyclical/extends.json @@ -0,0 +1,3 @@ +{ + "extends": "./toilconfig.json" +} diff --git a/tests/asconfig/cyclical/package.json b/tests/toilconfig/cyclical/package.json similarity index 100% rename from tests/asconfig/cyclical/package.json rename to tests/toilconfig/cyclical/package.json diff --git a/tests/asconfig/cyclical/asconfig.json b/tests/toilconfig/cyclical/toilconfig.json similarity index 100% rename from tests/asconfig/cyclical/asconfig.json rename to tests/toilconfig/cyclical/toilconfig.json diff --git a/tests/asconfig/entry-points/assembly/data.ts b/tests/toilconfig/entry-points/assembly/data.ts similarity index 100% rename from tests/asconfig/entry-points/assembly/data.ts rename to tests/toilconfig/entry-points/assembly/data.ts diff --git a/tests/asconfig/entry-points/assembly/globalTwo.ts b/tests/toilconfig/entry-points/assembly/globalTwo.ts similarity index 100% rename from tests/asconfig/entry-points/assembly/globalTwo.ts rename to tests/toilconfig/entry-points/assembly/globalTwo.ts diff --git a/tests/asconfig/entry-points/assembly/globals.ts b/tests/toilconfig/entry-points/assembly/globals.ts similarity index 100% rename from tests/asconfig/entry-points/assembly/globals.ts rename to tests/toilconfig/entry-points/assembly/globals.ts diff --git a/tests/asconfig/entry-points/assembly/index.ts b/tests/toilconfig/entry-points/assembly/index.ts similarity index 100% rename from tests/asconfig/entry-points/assembly/index.ts rename to tests/toilconfig/entry-points/assembly/index.ts diff --git a/tests/asconfig/entry-points/nested/assembly/index.ts b/tests/toilconfig/entry-points/nested/assembly/index.ts similarity index 100% rename from tests/asconfig/entry-points/nested/assembly/index.ts rename to tests/toilconfig/entry-points/nested/assembly/index.ts diff --git a/tests/asconfig/entry-points/nested/package.json b/tests/toilconfig/entry-points/nested/package.json similarity index 100% rename from tests/asconfig/entry-points/nested/package.json rename to tests/toilconfig/entry-points/nested/package.json diff --git a/tests/toilconfig/entry-points/nested/toilconfig.json b/tests/toilconfig/entry-points/nested/toilconfig.json new file mode 100644 index 0000000000..c4010f9556 --- /dev/null +++ b/tests/toilconfig/entry-points/nested/toilconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../toilconfig.json" +} diff --git a/tests/asconfig/entry-points/node-resolution/assembly/index.ts b/tests/toilconfig/entry-points/node-resolution/assembly/index.ts similarity index 100% rename from tests/asconfig/entry-points/node-resolution/assembly/index.ts rename to tests/toilconfig/entry-points/node-resolution/assembly/index.ts diff --git a/tests/toilconfig/entry-points/node-resolution/node_modules/entry-points/toilconfig.json b/tests/toilconfig/entry-points/node-resolution/node_modules/entry-points/toilconfig.json new file mode 100644 index 0000000000..015b2a94eb --- /dev/null +++ b/tests/toilconfig/entry-points/node-resolution/node_modules/entry-points/toilconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../toilconfig.json" +} diff --git a/tests/asconfig/entry-points/node-resolution/package.json b/tests/toilconfig/entry-points/node-resolution/package.json similarity index 100% rename from tests/asconfig/entry-points/node-resolution/package.json rename to tests/toilconfig/entry-points/node-resolution/package.json diff --git a/tests/toilconfig/entry-points/node-resolution/toilconfig.json b/tests/toilconfig/entry-points/node-resolution/toilconfig.json new file mode 100644 index 0000000000..a9e39d048b --- /dev/null +++ b/tests/toilconfig/entry-points/node-resolution/toilconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "entry-points/toilconfig.json" +} diff --git a/tests/asconfig/entry-points/package.json b/tests/toilconfig/entry-points/package.json similarity index 100% rename from tests/asconfig/entry-points/package.json rename to tests/toilconfig/entry-points/package.json diff --git a/tests/asconfig/entry-points/asconfig.json b/tests/toilconfig/entry-points/toilconfig.json similarity index 100% rename from tests/asconfig/entry-points/asconfig.json rename to tests/toilconfig/entry-points/toilconfig.json diff --git a/tests/asconfig/extends/assembly/index.ts b/tests/toilconfig/extends/assembly/index.ts similarity index 100% rename from tests/asconfig/extends/assembly/index.ts rename to tests/toilconfig/extends/assembly/index.ts diff --git a/tests/asconfig/extends/expected.json b/tests/toilconfig/extends/expected.json similarity index 100% rename from tests/asconfig/extends/expected.json rename to tests/toilconfig/extends/expected.json diff --git a/tests/asconfig/extends/extends.json b/tests/toilconfig/extends/extends.json similarity index 100% rename from tests/asconfig/extends/extends.json rename to tests/toilconfig/extends/extends.json diff --git a/tests/asconfig/extends/package.json b/tests/toilconfig/extends/package.json similarity index 100% rename from tests/asconfig/extends/package.json rename to tests/toilconfig/extends/package.json diff --git a/tests/asconfig/extends/asconfig.json b/tests/toilconfig/extends/toilconfig.json similarity index 100% rename from tests/asconfig/extends/asconfig.json rename to tests/toilconfig/extends/toilconfig.json diff --git a/tests/asconfig/index.js b/tests/toilconfig/index.js similarity index 87% rename from tests/asconfig/index.js rename to tests/toilconfig/index.js index e81d18dfa1..038293ee07 100644 --- a/tests/asconfig/index.js +++ b/tests/toilconfig/index.js @@ -1,7 +1,7 @@ import path from "path"; import fs from "fs"; import { createRequire } from "module"; -import asc from "../../dist/asc.js"; +import toilscript from "../../dist/cli.js"; import loader from "../../lib/loader/index.js"; const require = createRequire(import.meta.url); @@ -10,7 +10,7 @@ const args = process.argv.slice(2); /** @type {Uint8Array} */ let binary; -const { error, stderr } = await asc.main(["assembly/index.ts", "--outFile", "output.wasm", "--exportStart", "_start", ...args], { +const { error, stderr } = await toilscript.main(["assembly/index.ts", "--outFile", "output.wasm", "--exportStart", "_start", ...args], { writeFile(name, contents) { if (name === "output.wasm") { binary = contents; @@ -60,7 +60,7 @@ if (fs.existsSync(jsonPath) && stderrString) { if (!binary) { - console.error("No binary was generated for the asconfig test in " + process.cwd()); + console.error("No binary was generated for the toilconfig test in " + process.cwd()); process.exit(1); } diff --git a/tests/asconfig/package.json b/tests/toilconfig/package.json similarity index 100% rename from tests/asconfig/package.json rename to tests/toilconfig/package.json diff --git a/tests/asconfig/respect-inheritence/assembly/index.ts b/tests/toilconfig/respect-inheritence/assembly/index.ts similarity index 59% rename from tests/asconfig/respect-inheritence/assembly/index.ts rename to tests/toilconfig/respect-inheritence/assembly/index.ts index 1c0b3966b2..ada54e5375 100644 --- a/tests/asconfig/respect-inheritence/assembly/index.ts +++ b/tests/toilconfig/respect-inheritence/assembly/index.ts @@ -2,4 +2,4 @@ assert(ASC_OPTIMIZE_LEVEL == 3); // enabled in target release which is default assert(ASC_FEATURE_SIMD); -// disable: ["simd"] is set in asconfig under general options, it should be ignored +// disable: ["simd"] is set in toilconfig under general options, it should be ignored diff --git a/tests/asconfig/respect-inheritence/package.json b/tests/toilconfig/respect-inheritence/package.json similarity index 100% rename from tests/asconfig/respect-inheritence/package.json rename to tests/toilconfig/respect-inheritence/package.json diff --git a/tests/asconfig/respect-inheritence/asconfig.json b/tests/toilconfig/respect-inheritence/toilconfig.json similarity index 100% rename from tests/asconfig/respect-inheritence/asconfig.json rename to tests/toilconfig/respect-inheritence/toilconfig.json diff --git a/tests/asconfig/target/assembly/index.ts b/tests/toilconfig/target/assembly/index.ts similarity index 100% rename from tests/asconfig/target/assembly/index.ts rename to tests/toilconfig/target/assembly/index.ts diff --git a/tests/asconfig/target/expected.json b/tests/toilconfig/target/expected.json similarity index 100% rename from tests/asconfig/target/expected.json rename to tests/toilconfig/target/expected.json diff --git a/tests/asconfig/target/package.json b/tests/toilconfig/target/package.json similarity index 100% rename from tests/asconfig/target/package.json rename to tests/toilconfig/target/package.json diff --git a/tests/asconfig/target/asconfig.json b/tests/toilconfig/target/toilconfig.json similarity index 100% rename from tests/asconfig/target/asconfig.json rename to tests/toilconfig/target/toilconfig.json diff --git a/tests/asconfig/use-consts/assembly/index.ts b/tests/toilconfig/use-consts/assembly/index.ts similarity index 100% rename from tests/asconfig/use-consts/assembly/index.ts rename to tests/toilconfig/use-consts/assembly/index.ts diff --git a/tests/asconfig/use-consts/package.json b/tests/toilconfig/use-consts/package.json similarity index 100% rename from tests/asconfig/use-consts/package.json rename to tests/toilconfig/use-consts/package.json diff --git a/tests/asconfig/use-consts/asconfig.json b/tests/toilconfig/use-consts/toilconfig.json similarity index 100% rename from tests/asconfig/use-consts/asconfig.json rename to tests/toilconfig/use-consts/toilconfig.json diff --git a/tests/tokenizer.js b/tests/tokenizer.js index a81df43467..8f89a9bdfc 100644 --- a/tests/tokenizer.js +++ b/tests/tokenizer.js @@ -1,7 +1,7 @@ import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; -import { Tokenizer, Token, Source, SourceKind } from "../dist/assemblyscript.js"; +import { Tokenizer, Token, Source, SourceKind } from "../dist/toilscript.js"; const dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/util/README.md b/util/README.md index bcc9d83cf2..fac12a642e 100644 --- a/util/README.md +++ b/util/README.md @@ -16,7 +16,7 @@ Various utility functions shared accross the codebase. It is possible to reuse the utility in your own project like so: ```ts -import { ... } from "assemblyscript/util/terminal.js"; +import { ... } from "toilscript/util/terminal.js"; ... ``` diff --git a/util/web.d.ts b/util/web.d.ts index 4433ca2315..28f256df6b 100644 --- a/util/web.d.ts +++ b/util/web.d.ts @@ -7,5 +7,5 @@ export function fetch(url: string): Promise<{ arrayBuffer(): Promise; text(): Promise; - json(): Promise; // eslint-disable-line @typescript-eslint/no-explicit-any + json(): Promise; }>;